2010年07月30日

RaceTop10 修正しました

今度はv2で保存してます。
http://www.bec-co.sakura.ne.jp/dataland/Repository.php
いや〜。大変失礼しました。97-2003形式で保存してたって、2003で使えないメソッド使ってたら意味ないですよね。Office2010とか、まだ使ってみてないけど、また何か変わってるんでしょうかねー。
P1000328.JPG
posted by ちょびちょび at 23:02| Comment(53) | TrackBack(0) | 日記
この記事へのコメント
よくわからずここにコメントを載せる事にしました。色々お手数かけましたが、無事に解決できました。ありがとうございます。
また何かありましたら、その時もよろしくお願いします。
Posted by zenkan1975 at 2010年08月09日 18:01
ありがとうございます。
V2バージョンはどこからダウンロードさせて頂けますか?
宜しくお願いします。
Posted by ハツコ at 2010年08月11日 15:16
RaceTop10について風向きや風速、波の高さレース結果、人気など、データとして入っているものを全て取り込みたいと思ったのですが、コメントを書いても、もう見ていただいていないでしょうか?
Posted by 初見 at 2013年06月20日 22:30
コメントありがとうございます。いえ。毎日ではないですけど、一応管理しています。
H1800(規格とか距離?)、天気、風向、風速、波高についてはレース番号のついでに簡単な修正で取り込めます。
レース結果と人気は別シートでこんな感じですか? 
http://www.bec-co.sakura.ne.jp/dataland/Repository.php
すみません。大変ダサいのですが、画面が真っ白だったり文字化けしている場合は文字コードをUTF-8にして表示して下さい。
Posted by ちょびちょび at 2013年06月23日 11:00
始めまして。ネットでvbaを検索していたらこちらに辿り着きました。突然の質問なのですが以前「報告書作製補助ツール」を作成されておられてそれをDLして使わせて頂いております。これは取り込んだ写真は圧縮されているのでしょうか??他サイトでVBAでは圧縮出来ない(コードが無い)ので画像を縮小してトリミングして貼る方法なら出来るみたいな事が記載されており実際このツールも写真を取り込んだ後ファイルサイズが少さいのでそうなっているのかなー?って素人ながら思って居たのですが・・。あとフォルダ選択ボタンに加えて写真の入っているフォルダのパスを指定して取り込む様に機能追加は可能でしょうか??
Posted by takoyakiudonnari at 2013年06月25日 03:50
コメントありがとうございます。
工事名称の下あたりのセルにパスを入力して、写真貼付ボタンをクリックとかできますよ。画像の圧縮はしてません。VBAが自力では圧縮できないんですけど、どうしても圧縮する必要がある場合はzip32.dllなどを利用して圧縮したりします。せっかくコメント頂いたので、パスの直接入力と圧縮を追加してみましょう。
Posted by ちょびちょび at 2013年06月25日 07:20
対応ありがとうございます!あの別件で質問なんですが雑誌でみてODBC経由でオラクルに接続してSQLでデータを抽出するコードなんですがwere句で抽出条件を期間検索させたいと思ってます。(接続先のユーザーIDとパスは雑誌記載のままです)
Option Explicit
Sub F_Sample058()
Dim myCnc1 As String
Dim myCnc2 As String
Dim myCnc3 As String
Dim myCmd As String
Worksheets.Add 'ワークシートの追加
myCnc1 = "ODBC;"
myCnc2 = "Driver={Microsoft ODBC for Oracle};"
myCnc3 = "UID=scot;PWD=tiger;SERVER=ServerName;" '接続先サーバーを指定する
'SQLで読み込むテーブルを指定する
myCmd = "SELECT * FROM 担当者"
With ActiveSheet.QueryTables.Add( _
Connection:=myCnc1 & myCnc2 & myCnc3, _
Destination:=Range("A1"))
.CommandText = myCmd
.Refresh
End With
End Sub

コードは↑これで会社のサーバーに接続して抽出は出来たのですがテキストBOXかセルを2つ使用して例えば2013/06/01〜2013/06/02とか指定して抽出させたいと考えております。宜しければご教授頂けたらお願いします。
Posted by takoyakiudon at 2013年06月25日 19:09
ええっと。テキストボックスだったらこんな感じだと思います。
myCmd = "SELECT * FROM 担当者 WHERE 日付のカラム名 BETWEEN TO_DATE('" & Me.TextBox1 & "', 'YYYY/MM/DD') AND TO_DATE('" & Me.TextBox2 & "', 'YYYY/MM/DD')"
セルだったら Worksheets("Sheet1").Cells(1, 1) とか。Oracle無いので、確実な回答ができないのですが……。
Posted by ちょびちょび at 2013年06月25日 22:35
返信ありがとうございます。さっそくワタシも自宅にオラクル環境が無いのでテキストBOXで会社で試してみたいと思います。ちなみにクエリを編集出来なくする方法ってありますか?

またまた別件で質問で申し訳ありません。
「ADOにてデータベースのようにSQL文で値を取得」する内容のVBAですが(某HPで2010頃の掲載)
[前提条件]
・「コンボボックス」コントロールを2個作成します。
 ComboBox1
 ComboBox2
・Sheet1のE2からI15セルへ取得するデータ(表)を作成します。
 サンプルのようにデータを配置してください。
 (セルは文字型です。)
・下記のサンプルコードを指定の場所へ貼り付けて。保存しておきます。
 「コンボボックス」コントロールの処理→Sheet1のマクロ
 「ADO」処理→Module







'ココから↓は、エクセルシートのマクロ部分へ貼り付ける。
Option Explicit

'ComboBox1(部)をクリックした時に実行される処理
'一覧の「部」項目を取得
Private Sub ComboBox1_GotFocus()
ComboBox1.list = prcADOExecute("SELECT 部 FROM [Sheet1$E2:I15] WHERE 係<>'00' GROUP BY 部")
End Sub

'ComboBox1(部)の値を変更した時に実行される処理
'部コードより一覧の「名称」項目を名称欄へ表示
Private Sub ComboBox1_Change()
If ComboBox1.Value <> "" Then
Range("C2").Value = prcADOExecute2("SELECT 名称 FROM [Sheet1$E2:I15] WHERE 所属CD = '" & CStr(ComboBox1.Value) & "0000'")
ComboBox2.Value = ""
Range("C3").Value = ""
Else
ComboBox2.Value = ""
Range("C2").Value = ""
Range("C3").Value = ""
End If
End Sub

'ComboBox2(課)をクリックした時に実行される処理
'一覧の「課」項目を取得
Private Sub ComboBox2_GotFocus()
ComboBox2.list = prcADOExecute("SELECT 課 FROM [Sheet1$E2:I15] WHERE 部 = '" & CStr(ComboBox1.Value) & "' AND 係<>'00' GROUP BY 課")
End Sub

'ComboBox2(課)の値を変更した時に実行される処理
'課コードより一覧の「名称」項目を名称欄へ表示
Private Sub ComboBox2_Change()
If ComboBox1.Value <> "" Then
Range("C3").Value = prcADOExecute2("SELECT 名称 FROM [Sheet1$E2:I15] WHERE 所属CD = '" & CStr(ComboBox1.Value) & "" & CStr(ComboBox2.Value) & "00'")
Else
Range("C3").Value = ""
End If
End Sub


'ココから↓は、Moduleへ貼り付ける。
Option Explicit
'*******************************************
'* 機 能:(ADO)実行元のBOOKに対しSQLを実行する。
'* 引 数:実行SQL文
'* 戻り値:一次元配列を戻す。
'*******************************************
Public Function prcADOExecute(ByVal sql As String) As Variant

Dim list() As String
Dim adoCon As Variant
Dim adoRS As Object
Dim i As Integer

'データベースのオープン(ADOオブジェクトを生成)
Set adoCon = CreateObject("ADODB.Connection")
Set adoRS = CreateObject("ADODB.Recordset")

'実行元エクセルBookに対し、ADO接続を行う。
adoCon.Open "Driver={Microsoft Excel Driver (*.xls)}; " & _
"DBQ=" & ThisWorkbook.FullName & ";" & _
"ReadOnly=0"

'引数のSQL文を実行する。
Set adoRS = adoCon.Execute(sql)

'SQLの実行結果をデータが無くなるまで配列へ格納します。
i = 0
Do Until adoRS.EOF = True

ReDim Preserve list(i) '格納配列のサイズを1つ増やす。
list(i) = adoRS(0) '配列へ値を保存する。
adoRS.MoveNext 'カーソルを次の行へ
i = i + 1
Loop

'データベースのクローズ
adoRS.Close
adoCon.Close

'オブジェクトのクリア
Set adoRS = Nothing
Set adoCon = Nothing

'戻り値をセットする。
prcADOExecute = list

End Function


'*******************************************
'* 機 能:(ADO)実行元のBOOKに対しSQLを実行する。
'* 引 数:実行SQL文
'* 戻り値:String型の値を1つ戻す。
'*******************************************
Public Function prcADOExecute2(ByVal sql As String) As String

Dim adoCon As Variant
Dim adoRS As Object
Dim i As Integer

'データベースのオープン(ADOオブジェクトを生成)
Set adoCon = CreateObject("ADODB.Connection")
Set adoRS = CreateObject("ADODB.Recordset")

'実行元エクセルBookに対し、ADO接続を行う。
adoCon.Open "Driver={Microsoft Excel Driver (*.xls)}; " & _
"DBQ=" & ThisWorkbook.FullName & ";" & _
"ReadOnly=0"

'引数のSQL文を実行する。
Set adoRS = adoCon.Execute(sql)

'SQLの実行結果を戻り値へ格納します。
If adoRS.Fields.Count > 0 Then
If adoRS.EOF = True Then
prcADOExecute2 = "" '値が取得できていない時。
Else
prcADOExecute2 = adoRS(0) '値が取得できている時。
End If
End If


'データベースのクローズ
adoRS.Close
adoCon.Close

'オブジェクトのクリア
Set adoRS = Nothing
Set adoCon = Nothing

End Function

'******************************


という内容です。おそらく検索すればHPに辿り付けると思いますが指定した通りデータも作成しコードも貼り付けてみたのですが「パラメータが少なすぎます1を指定してください」とエラーになってしまいます。hp主に確認すれば手っ取り早いと思いましたが結構前の記事である事や返事頂けるか不安(笑)、連絡取る手段がよく解からなかったのでちょびさんなら解決出来るかなーって勝手に考えてしまいました。お時間ある時で構いませんし答えてもいいかな?と思って頂ければ回答して頂けたら助かります。もし何だったらスルーして頂いて構いません。。

Posted by takoyakiudon at 2013年06月26日 12:46
オブジェクトウィンドウを表示させないとか、クエリを隠す方法としてはそのくらいですよね。VBAでクエリを一々作成、終了時は削除。モジュールはパスワードで保護。とかの措置を取ったことはあります。
「パラメータが少なすぎます1を指定してください」はフィールドの記述がどこか1個所違ってるんだと思いますが、今晩でも早く帰れたら見てみましょう。
Posted by ちょびちょび at 2013年06月27日 07:10
ありがとうございます!ちなみにおととい教えて頂いたオラクルのwhere句なんですがオラクル環境でテキストBOX2つ設置して試してみたところ「Me.の使用方法が不正です」とエラーになりました↓何が原因でしょうか??
(・ω・ )ハテ?
myCmd = "SELECT * FROM 担当者 WHERE 日付のカラム名 BETWEEN TO_DATE('" & Me.TextBox1 & "', 'YYYY/MM/DD') AND TO_DATE('" & Me.TextBox2 & "', 'YYYY/MM/DD')"
Posted by takoyakiudon at 2013年06月27日 12:08
RaceTop10の質問をさせていただいた者です。
海の者とも山の者ともわからない質問に対し、即座に手を加えていただき、ありがとうございました。
こんな短時間で要望に応えていただける手腕に感服しました。
1点、我儘を言わせていただけるならば、「抜き」「逃げ」等の決まり手についても取り込むことは可能でしょうか?お手すきの時間があればでかまいませんので、ご検討いただけると幸いです。
Posted by 初見 at 2013年06月27日 21:05
こんばんは。初見さん。
決まり手は波高の隣に追加しておきました。v3を入れ替えておきましたので、またダウンロードして下さい。

takoyakiudonさん。
「Me.の使用方法が不正です」というのはExcelが「Meとか言われても、私のじゃないしー」という状態です。コードがモジュールに記述されているとすると、ユーザーフォーム名("テキストボックス名")のような感じでどこのテキストボックスかということを教えてあげる必要があります。セルだったら、Sheets("Sheet1").Range("A1")とか。じゃなかったら、コードをテキストボックスのあるシートに移動させるか。
Posted by ちょびちょび at 2013年06月27日 23:26
ありがとうございます。
<あ〜なるほど・・。ではテキストBOXをDim textbox1 As 〜
とか指定してやればいいですね〜。


と返信しようと思ってたところ無事上手くいきました!ありがとうございます!前の別の質問もまたお時間ある時に回答(報告書作成補助ツールの機能追加)もお願いします!ヽ(´□`。)ノ・゚
Posted by takoyakiudon at 2013年06月28日 11:33
またもや、早々の修正をいただきありがとうございました。希望通りの仕上がりに感謝いたします。
ちなみに、他のブログ記事に記載されていた、leo@***sakuraのアドレスは現在も利用されているのでしょうか?
Posted by 初見 at 2013年06月28日 20:28
こんにちは。takoyakiudonさん。
報告書作成補助ツール入れ替えておきましたので、お試しください。
http://www.bec-co.sakura.ne.jp/dataland/Repository.php

ComboBox1.list = prcADOExecute("SELECT 部 FROM [Sheet1$E2:I15] WHERE 係<>'00' GROUP BY 部")
あー。パラメタが少ないとか文句言ってますね。

@部とかカラム名に問題があるとき[部]とか括ってあげると分かってもらえるときがあります。
A私も陥ってしまった罠ですが、E2となっているでしょ。見出しは1行目に定義されていませんか?
E1:I15で読めるようになるかもしれません。


初見さん。
leo@〜。忘れてました。時々テストで必要なとき使ってます。久々に見たら、Facebookのリクエストが沢山来てますねー。Hi,Chobi! とか呼びかけられても、それはウチのネコなんですけど……。しかも現在は天国にいたりします。
メール頂けるんでしたら、ここで「送ったよ」とコメント頂ければチェックします。もうずいぶん更新していませんが、こんなとこでも変な広告が書き込まれていたりするんで、お掃除は1日1回してるんですよ。まさか人間じゃなくてそーいう自動書き込みのアプリがあるんだろうけど、ご苦労さまなことです。
Posted by ちょびちょび at 2013年06月29日 11:17
leo@の方にお礼がてらメールを送らせていただきました。対応いただき、ありがとうございました。
Posted by 初見 at 2013年06月29日 18:03
初見さん
ギフト券ありがとうございます。登録後、お礼メッセージ入力のあたりでネコが降ってきて復帰方法が分らず、こんなところからすみません。
Posted by ちょびちょび at 2013年06月30日 14:45
お世話になります((。´・ω・)。´_ _))ペコ

報告書作成補助ツール、対応ありがとうございました!!早速使用させて頂きます!!


<@部とかカラム名に問題があるとき[部]とか括ってあげると分かってもらえるときがあります。
A私も陥ってしまった罠ですが、E2となっているでしょ。見出しは1行目に定義されていませんか?
E1:I15で読めるようになるかもしれません。

・・・(・ω・`)ふむふむ・・・
なるほど・・ちょっと言われた通りやってみたんですが今度はパラメータが少なすぎます2を指定してくださいと出ました・・。[]で括るとこんな感じですよね?
Private Sub ComboBox1_GotFocus()
ComboBox1.list = prcADOExecute("SELECT [部] FROM [Sheet1$E1:I15] WHERE [係]<>'00' GROUP BY [部]")
End Sub
Posted by takoyakiudon at 2013年06月30日 17:26
takoyakiudonさん

ADOのサンプルアップしました。これを参考にしてみて下さい。
http://www.bec-co.sakura.ne.jp/dataland/Repository.php

※これぞMicrosoftMagicというか、最初確かにエラーが出たんですけどいろいろ試しているうちにエラーが出なくなって、結局今は元々のコードでちゃんと一覧が編集できてます。もう10年以上はOffice使ってますけど、よくあるんですよね。こーいう現象……。
Posted by ちょびちょび at 2013年06月30日 20:13
おはようございます。サンプルまで作ってくださり・・本当にありがとうございます!参考にして試してみます!((。´・ω・)。´_ _))ペコ
Posted by takoyakiudon at 2013年07月01日 05:42
こんばんは。
無事到着したようで何よりです。
ネコが降ってくるくだりはよくわかりませんが、ご活用いただけると幸いです。
ありがとうございました。
Posted by 初見 at 2013年07月01日 21:20
お世話になります((。´・ω・)。´_ _))ペコ
先日アドバイス頂いた件で数日間試して無事結果を出す事が出来ました!ありがとうございます!

またまた質問なんですがこちらのページにありますhttp://www.atmarkit.co.jp/ait/articles/0508/06/news016_2.html
オラクルDBに接続(またまた環境が無いもので申し訳ありません。。)
なんですが
以下コード
Private Sub CommandButton1_Click()

On Error GoTo Err_Han

If oraconn.State = 0 Then
Call Conn
End If

' データ取得メイン処理を呼び出す
getProductInfo

Exit Sub

Err_Han:
' エラー処理
MsgBox (Err.Description)

End Sub

'データベース接続処理
Private oraconn As New ADODB.Connection
Private Sub Conn()

ConnectionString = "DSN=orcl;UID=scott;PWD=tiger"
oraconn.ConnectionString = ConnectionString
oraconn.Open

End Sub

'データ取得メイン処理
Private Sub getProductInfo()

' 変数定義
Dim rs As ADODB.Recordset ' レコードセット(商品情報)

' データ取得処理
Set rs = selectProducts

' データが取得されなかったら何もしない
If rs Is Nothing Then
Exit Sub
End If

' 商品情報データをシートに格納
Call setDataView(rs, theSheet.Cells(4, 2))

' レコードセットクローズ
rs.Close

End Sub

'データ取得処理
Private Function selectProducts() As ADODB.Recordset

Dim strSql As String

Dim strSql As String

strSql = " select ""商品ID"",""商品名"",""分類名"", " & _
" ""内容量"",""内容量単位"",""原材料""," & _
" ""保存方法"",""賞味期限"",""価格"" " & _
" from ""商品情報"",""商品分類"" " & _
" where ""商品情報"".""分類ID"" = ""商品分類"".""分類ID""

Set selectProducts = oraconn.Execute(strSql)

End Function
リスト1 ADO+ODBCの場合のデータベースへの接続(表示の都合で改行されています。コードはlist01から確認できます)

'〜 ボタンクリックのプロシージャはADO+ODBCと同一なので省略 〜

Private oraconn As New ADODB.Connection
Private Sub Conn()

' データベースに接続する
ConnectionString = "Provider=OraOLEDB.Oracle;Data Source=orcl;User ID=scott;Password=tiger;"

oraconn.ConnectionString = ConnectionString
oraconn.Open

End Sub

'〜 データ取得処理はADO+ODBCの場合と同一なので省略 〜
リスト2 ADO+OLE DBの場合のデータベースへの接続(表示の都合で改行されています。コードはlist02から確認できます)

Private Sub CommandButton1_Click()

On Error GoTo Err_Han

If OraDB Is Nothing Then
Call Conn
End If

If OraDB.ConnectionOK = False Then
Call Conn
End If

' データ取得メイン処理を呼び出す
getProductInfo

Exit Sub

Err_Han:
' エラー処理
MsgBox (Err.Description)

End Sub

Private OraSess As OraSession
Private OraDB As OraDatabase

' データベース接続処理
Private Sub Conn()

Set OraSess = CreateObject("OracleInProcServer.XOraSession")
Set OraDB = OraSess.OpenDatabase("orcl", "scott" & "/" & "tiger", 0&)

End Sub

'データ取得メイン処理
Private Sub getProductInfo()

' 変数定義
Dim oraDS As OraDynaset ' レコードセット(商品情報)

' データ取得処理
Set oraDS = selectProducts()

' データが取得されなかったら何もしない
If oraDS Is Nothing Then
Exit Sub
End If

' 商品情報データをシートに格納する
Call setDataView(oraDS, theSheet.Cells(4, 2))

' レコードセットクローズ
oraDS.Close

End Sub

'データ取得処理
Private Function selectProducts() As OraDynaset

Dim strSql As String

strSql = " select ""商品ID"",""商品名"",""分類名"", " & _
" ""内容量"",""内容量単位"",""原材料""," & _
" ""保存方法"",""賞味期限"",""価格"" " & _
" from ""商品情報"",""商品分類"" " & _
" where ""商品情報"".""分類ID"" = ""商品分類"".""分類ID""

Set selectProducts = OraDB.CreateDynaset(strSql, 0&)

End Function
リスト3 oo4oの場合のデータベースへの接続
 
接続先とカラム名を設定し試したんですが「オブジェクトがありません」とエラーとなってしまいます。アドバイス頂けると非常に助かります。
お忙しい所恐縮ですがよろしくお願い致します。。((。´・ω・)。´_ _))ペコ





あと可能であればなんですがツールの作成をお願いしてもいいですか?
お時間があって実行可能であればなんですが
http://seiji.yahoo.co.jp/vote/
のYahooみんなの政治ってサイトがあるのですがそのサイトの中で「政治投票」ってコーナーがあるんです。その現在実施中の投票一覧がエクセルでみれてハイパーリンクで(ハイパーリンクじゃなくても一覧と内容がエクセルで確認出来れば良い)その内容に飛べる、って内容です。また過去の(集計終了した)内容もエクセルで一覧が表示されボタン?か何かで閲覧出来たらいいな〜って思います。完全に個人の趣向ですが自分用にあったら便利だな〜と思ったもので。。もし作ってもいいかな、と思ってくださったら作成をお願いしたいです。・・ん〜ちょっとなぁ・・と思われたらスルーで構いません笑よろしくお願いします(>Д<)ゝ”
Posted by takoyakiudon at 2013年07月05日 12:40
あ、聞き忘れていたのですが写真報告書ツール、写真の圧縮も機能追加されてるんでしたっけ??
(・ω・ ) ?
Posted by takoyakiudon at 2013年07月09日 03:41
takoyakiudonさん

おはようございます。写真の圧縮について以前的の外れたことを書いてしまいましたが、このツールではそのような処理はしていません。サイズが微妙に減っていたとすると、取り込む過程で画像が劣化したのでしょう。もちろんワザと拡大した画像を少し切り取って貼るなどの処理をすることもあります。外部のdllなどを使用して圧縮するというのは写真を貼り終わったExcelに対する処理のことです。

オブジェクトがありませんの件ですが、Private Sub CommandButton1_Click()だけ別のモジュールで下記の処理から違うモジュールに書いていたりしますか?

'データベース接続処理
Private oraconn As New ADODB.Connection
Private Sub Conn()

もし同じモジュールに全部コードが入っていたとするとoraconnの行がコンパイルエラーになるかと思います。すべてのSubやFunctionより前なら大丈夫です。しかし、@ITに掲載されている例だしなー。バージョンによってはこういう書き方もOKなのかな……。大規模な開発を複数人で行う場合にはいかにもオブジェクト指向的にDB接続などは外に記述する必要があるのかもしれませんが、Excelを使用する場合は比較的こじんまりしたシステムですよね。同じSubの中で接続〜処理〜切断を一気に書いた方がオブジェクトが迷子にならなくていいかと思います。オブジェクトが無い! と怒られるのはConnect処理書いてないのにいきなりoraconn.xxxxとか出てくる場合だし。

すみません。ちょっとイメージがつかめないのですが、ツールというのは、ソーシャルネットワークでザッカーバーグくんたちが何かサイトを表示させてデータを取得してたような処理をExcelでやってみようという感じですか?
Posted by ちょびちょび at 2013年07月09日 07:32
写真の圧縮については了解しました!

<オブジェクトがありませんの件ですが、Private Sub CommandButton1_Click()だけ別のモジュールで下記の処理から違うモジュールに書いていたりしますか?

えっと、コピペしたので一つのモジュール内に書いてあります。SUBは別で接続〜処理〜切断となってますのでちょっとアドバイス通りやってみます〜(;^ω^)

<ソーシャルネットワークでザッカーバーグくんたちが何かサイトを表示させて・・

の件ですがFBは登録してますがあまり使用してないのでそれがどの様なものかちょっと解かりませんが単純にエクセル上に内容を取り込んで実施中の内容が一覧として表示されクリックしたら内容がエクセルで確認出来る、って感じです。説明がヘタクソで申し訳ありません。webページを取り込むVBAは知ってますが(ただ単純に取り込むだけ)プロはどの様な感じで作られるのか興味があるのと自分がただそういうツールがあったら使うので欲しい、っていう
自己満足的なもの・・とでも言いましょうか。。
(  )━━(Д` )━━(´Д`)

説明になってるのか解かりませんが。。
Posted by takoyakiudon at 2013年07月09日 13:33
お世話になります((。´・ω・)。´_ _))ペコ
DB接続処理をアドバイス頂いた通り一番先頭に移動させたところエラーは消えたのですが↓の

' 商品情報データをシートに格納
Call setDataView(rs, theSheet.Cells(4, 2))
でエラーになりました。よく観るとsetDataView・・ってコードが記載されていたwebページにもsetDataViewの事が書いてない・・。

CALLという事はsetDataViewSUBを実行だと思いますがそのSUBが無くて作業が停まってしまいました。シートに格納するコードだと思いますが全くこの後どうしていいもんか解からなくなってしまいました。。確かオラクル環境があるPCでエラー内容が宣言してないからどうのこうの(あともう一つ何か書いてあったような気がする)・・だったと思いますがどーしたら良いのでしょうか・・。

すんごい適当な文章で申し訳ありません。。
(((´・ω・`)カックン…

送った事ないので解かんないので質問ですがちなみにFBでメール送ったら他のユーザーはその内容は観れませんよね?どんなメール内容かとか。
Posted by takoyakiudon at 2013年07月10日 04:08
takoyakiudonさん

setDataViewとかサブルーチン作らなくても、取得したレコードセットをセルに張り付けるのは1行で済みますよ。

Sheet1.Cells(4, 2).CopyFromRecordset レコードセット

上の例だとselectProductsかな。

Facebookでもどこでもメールは他のユーザから閲覧できないと思いますが……。
Posted by ちょびちょび at 2013年07月10日 07:36
お世話になります((。´・ω・)。´_ _))ペコ
<setDataViewとかサブルーチン作らなくても・・

の件ですが
Sheet1.Cells(4, 2).CopyFromRecordset レコードセットを
Sheet1.Cells(4, 2).CopySelectProducts??
ってな感じでしょうか??
ちょっと会社で試してみます〜。
回答ありがとうございます!
Posted by takoyakiudon at 2013年07月10日 17:09
Sheet1.Cells(4, 2).CopyFromRecordset selectProduct
です。
Posted by ちょびちょび at 2013年07月10日 22:28
あ、なるほど!ありがとうございます!
Posted by takoyakiudon at 2013年07月11日 06:47
お世話になります((。´・ω・)。´_ _))ペコ
先日から相談させて頂いてるコードを会社で実行してみたのですが

(Call setDataView(rs, theSheet.Cells(4, 2))からアドバイスして頂いた
Sheet1.Cells(4, 2).CopyFromRecordset selectProduct)に変更してパスとID、SQLのカラムも変更して実行したのですが


[Oracle][ODBC][Ora]ORA-00936:式がありません。
とエラー表示されデバックで1ステップごとに実行してみました。
Set selectProducts = oraconn.Execute(strSql)
のところでカーソル合わせたら
SELECTProducts=Nothing
と表示しました。

SQL文は他のツールで問題なく抽出出来るので問題ないかな〜って思ってますが・・

これは原因は何が考えられますか??
( ・ω・)ハテ??
Posted by takoyakiudon at 2013年07月12日 12:51
おはようございます((。´・ω・)。´_ _))ペコ
上の方にありますちょびさんが以前Rasetop10のツールを作成されておられてどういう感じに動くのか試してみたくなり競艇サイトからレース結果のテキストファイルの入ったフォルダをDLして使ってみましたが取り込めませんでした。エクセルのverの違いなんでしょうか??ちなみに自宅PCは2003を使用しております。
Posted by takoyakiudon at 2013年07月16日 06:10
takoyakiudon さん

おはようございます。実行できないというのは、どういうエラーがでますか? 処理が始まりもしない状態なら、セキュリティの問題ではないですか? 数式バーの下あたりに何かメッセージないですか?

式がありませんというのはOracleがSQLを分かってくれないか接続処理ができていない状態です。oraconnは無事接続してますよね。11gなら、もうそのような問題はないと思いますが、WinXPと9iの組み合わせでExcelだったかAccessで日本語処理が怪しかったことがあったような……。他ツールでは大丈夫ということですが、環境が全て一緒なのにここだけダメというのはSQLの可能性が高いです。面倒でも英数字短めのテーブル名(T1とか)、カラム名(ID,NAMEとか)を作ってみて select * from T1 ぐらいのものを試して様子をみた方がいいかもしれません。
Posted by ちょびちょび at 2013年07月16日 07:38
お世話になります。((。´・ω・)。´_ _))ペコ
Rasetop10ですが
フォルダを選択してOKを押すと
' 「フォルダの参照」ダイアログよりフォルダ名の取得
strPATHNAME = FP_BrowseForFolder("フォルダを指定して下さい")
Worksheets("Sheet1").Cells(1, 1) = strPATHNAME ←のところでエラーになります。
「実行時エラー'1004':
Worksheets'メソッドは失敗しました;'Global'オブジェクト
と表示されました
数式バーの下ら辺は確認出来ませんでしたが

先ほど再度「ちょびちょびデータランド倉庫」からDLし直したら見事に無事問題なく動きました。PCの問題でしょうか?ちなみに同じOSの違うPCでも先ほど試しましたが問題なく動いてました。
(・ω・;)モニュ?

SQLの件ですが本日はワタシは公休日ですので明日出勤した際にもう一度アドバイス頂いた様に変更して試してやってみたいと思います!ありがとうございます!



Posted by takoyakiudon at 2013年07月16日 09:21
お世話になります((。´・ω・)。´_ _))ペコ
またまた質問ですが先日教えて頂いたSQL文でテキストBOXにWHERE 日付のカラム名 BETWEEN TO_DATE('" & TextBox1 & "', 'YYYY/MM/DD') AND TO_DATE('" & TextBox2 & "', 'YYYY/MM/DD')
に加えTextBox3を新たに配置しアルファベットのカラム名(アルファベットは部署名の名前)を検索条件に加えたいのですがコードはどの様に書いたらいいのでしょうか?ちなみに種類は普通にAからZまであります。説明ヘタクソですがお願いします。
Posted by takoyakiudon at 2013年07月17日 19:48
カラム名 = '" & TextBox3 & "'" です。
抽出したい値が複数だったら
カラム名 in('A','B','C')のような書き方もあります。
Posted by ちょびちょび at 2013年07月18日 07:37
ありがとうございました!本日仕事で大変役に立ちました。((。´・ω・)。´_ _))ペコ

またまた質問で申し訳ありませんが↓のように業務で使用しております私が作成したツールでIF文を多用してます。種類があまりにも多くてかなりの長文になってしまってます。すっきりとしたコードが多分あるんだろうな〜と思いながら他に方法を知らないので全ての条件を下のようにダラダラとコードを書いてます|ι´Д`|っ

If Sheets("main").Cells(i, 14).Value = "105" And Sheets("main").Cells(i, 15).Value = "25" And Sheets("main").Cells(i, 16).Value = "2" Then Sheets("main").Cells(i, 13).Value = "[1]"
If Sheets("main").Cells(i, 14).Value = "105" And Sheets("main").Cells(i, 15).Value = "35" And Sheets("main").Cells(i, 16).Value = "4" Then Sheets("main").Cells(i, 13).Value = "[2]"
これら異なる条件が100以上あるのですがすっきりとした記述にするにはどのように書いたらら良いのでしょうか??お時間ある時で構いませんがアドバイスをお願い致します
(´・ω・`)ゞ
Posted by takoyakiudon at 2013年07月18日 22:50
条件が多い場合は select case とかありますが、100以上も条件があるならどこかに一覧を作って検索した方がいいと思います。ADOTest.xlsmとか手抜きで名前は一緒ですが見本を入れ替えておきましたので、参考にして下さい。vlookup で気を付けないといけないところは完全に一致しないとエラーになるところです。

http://www.bec-co.sakura.ne.jp/dataland/Repository.php
Posted by ちょびちょび at 2013年07月19日 00:19
お世話になります((。´・ω・)。´_ _))ペコ
サンプルまで作成して頂きありがとうございます!このサンプルを見て思ったのですが新たな閃きが生まれました。ちょっと別件の改善に役立てたいと思います。ちなみにselect case などでやるとなるとどういうコードになりますでしょうか?
というのもこのワタシが作成したツールがMSクエリを利用したツールで例えばロットNOを入力(ロットnoは連続して複数入力出来るDO〜LOOPで入力したロットNOの数だけ処理できる)したらパラメータクエリで品名、仕掛日を自動取得しシートに表示。取得した品名をキーとしてADOで別bookのシートにある品名一覧を取り込んでますがそのシートにある品名を変数で(アンティルを使用してます)完全一致したら条件をシートに取得してます。条件は会社のサーバーにテーブルがあるので取得出来るのですが条件noだけ業務で使用しているにも関わらずテーブルが存在しない為IF文をコードに書いてシートに表示させてます。
If Sheets("main").Cells(i, 14).Value = "105" And Sheets("main").Cells(i, 15).Value = "25" And Sheets("main").Cells(i, 16).Value = "2" Then Sheets("main").Cells(i, 13).Value = "[1]"
この場合ですと105、25、2はクエリで抽出出来ているので業務で使用している条件noを[1]と一番左側に表示させてます。
Posted by takoyakiudon at 2013年07月19日 02:41
C14 = Sheets("main").Cells(i, 14).Value
C15 = Sheets("main").Cells(i, 15).Value
C16 = Sheets("main").Cells(i, 16).Value
Select Case C14
Case 105
Select Case C15
Select Case C16
Case 2
A1 = [1]
Case 4
A1 = [2]
End Select
Case 25
Select Case C16
Case 2
A1 = [3]
Case 4
A1 = [4]
End Select
End Select
Case 106
Case Else
A1 = [0]
End Select
Sheets("main").Cells(i, 13).Value = A1

うわ。見づらい……。
C14とかA1とかの変数は使わなくてもOKですが、ここはお好みで。Selectを入れ子にしてひたすら書きます。
Posted by ちょびちょび at 2013年07月19日 07:50
ありがとうございます!参考にさせて頂きます!
└|●´ω`●|┘
Posted by takoyakiudon at 2013年07月19日 17:11
いつもお世話になります((。´・ω・)。´_ _))ペコ

もし数字の二倍以上だったらってコードを書くとしたらどの様な記述になりますでしょうか?
例えばもしCells(i, 14)の場所の値がCells(i, 18)の2倍以上だったらCells(i, 15)に合格
と出力したいのですがどのように記述したら良いでしょうか?
Posted by takoyakiudon at 2013年07月29日 22:38
For i = 2 To 5
If Cells(i, 14) * 2 <= Cells(i, 18) Then
Cells(i, 15) = "合格"
Else
Cells(i, 15) = "不合格"
End If
Next

ワークシート関数だったらこんな感じです。

=IF(N2*2<=R2,"合格","不合格")
Posted by ちょびちょび at 2013年07月30日 09:54
おはようございます((。´・ω・)。´_ _))ペコ
無事出来ました。いつもありがとうございます。

またまた質問ですが以前教えて頂いたSQL文でテキストBOXにWHERE 日付のカラム名 BETWEEN TO_DATE('" & TextBox1 & "', 'YYYY/MM/DD') AND TO_DATE('" & TextBox2 & "', 'YYYY/MM/DD')ってのがありました。TextBoxに加えてオプションボタンを3つくらい設置して日付指定ボタンを押したら↑の期間検索が出来る様になり残りの2つボタンで本日から7日前と本日から10日前と任意で選択出来る様にしたいのですがどのようにコードを書いたら良いでしょうか??
なんとなく他のものを参考にして
こんな感じなのかなぁ・・と思いましたが
(・ω・ )ハテ?

If Sheets(sheet1).OptionButton1.Value = True Then
'- 10日前のみ抽出
s_sql = s_sql & " and 日付のカラム名>= trunc(sysdate,-10) "





ちなみに以前質問させて頂いた@ITのサイトに記載されていたオラコン接続するコードですが数日間試してみましたがSQL文は問題なかった様でレコードセットの1部分がおかしかった様です。Sheet1.Cells(4, 2).CopyFromRecordset selectProduct シート1ってのがあいまいだったみたいでWorkSheets("Sheet1")〜みたいに変更したら無事結果を出す事が出来ました。ありがとうございました!

Posted by takoyakiudon at 2013年08月01日 07:03
takoyakiudonさん

おはようございます。お盆休みを確保するためになんだか慌ただしい日々を過ごしています。すみません。もう5日も経ってしまいましたので、解決していますよね? サーバの日付を使うとき、ちょっとハマるパターンというのは使っている時間帯がズレていて日付の判定に微妙な誤差が出たりすることです。自社サーバなどなら大丈夫だと思いますが。
Posted by ちょびちょび at 2013年08月05日 07:33
いつもお世話になります((。´・ω・)。´_ _))ペコ
毎度毎度お忙しい中回答頂き誠に助かっております。

↑のワタシの質問の
<TextBoxに加えてオプションボタンを3つくらい設置して日付指定ボタンを押したら↑の期間検索が出来る様になり残りの2つボタンで本日から7日前と本日から10日前と任意で選択出来る様にしたい〜

はまだ解決出来ておりませんのでお時間ある時に回答頂けたら助かります。ちなみに自社サーバーですので大丈夫かと思います。

あと加えて質問なのですがこれまたオプションボタンを3つくらい配置してVBAコード内にあるSQL文を選ぶ(使い分ける)事は可能でしょうか?
例MSDAORA方式で
"Provider=MSDAORA;Data Source=WGS_IMF00109-NTS_ORCL;User ID=※※; Password=※※;"
'取得するテーブルを指定する
myRst.Open Source:="SELECT 抽出内容1,抽出内容2 FROM テーブル名 WHERE 所属のカラム名=('" & Sheets("main").TextBox3 & "')AND 日付カラム名BETWEEN TO_DATE('" & Sheets("main").TextBox1 & "', 'YYYY/MM/DD') AND TO_DATE('" & Sheets("main").TextBox2 & "', 'YYYY/MM/DD')", ActiveConnection:=myCon
↑myRst以降SQL文にしてますが抽出パターンを3つくらい用意してシート上でオプションボタンを押して抽出内容を切り換えたいのです。日付などはそのまま上のように使用します。イメージ的に極端ですがサッカーの内容とテニスの内容とF1の内容を抽出するSQL文が同じプロージャの中に存在するがこれらは日付で検索出来るが同じBOOKで使い分けたいとでもいいましょうか・・。 ADODB.ConnectionとRecordsetを使用してます。

あともう一点はエクセルシート上に以下のように抽出されたフィールド(A列からI列)がありデータが大量にあるとします。

No.LOTNo.品名仕掛場所備考仕掛日付仕掛時刻仕掛数停滞理由

流れ作業なので各仕掛場所で同じロットNOのデータ存在します(例えば仕入れで100件のデータの中にロットNO「1111111111」洗い場で200件のデータの中にロットNO「1111111111」それが仕掛場所仕掛日付仕掛時刻順で縦に大量に並んでるのですが任意で検索したいロットNOの前後に並んでいる違うロットNOの経歴(例えば1111111111キーとして1111111111の前後に並んでいる違うロットNOの経歴)を抽出し前後5ロットずつ表示させたいです(データが5件無い、存在しない場合は※表示)
経歴は他の部門の方が作られたSQLで抽出させてますが加工経歴を大量に読み込み纏めるのが大変なのでボタン一発で何とかさせたいと考えてます。

説明がヘタクソで申し訳ありませんがよろしくお願い致します!m( __ __ )m
Posted by takoyakiudon at 2013年08月06日 01:25
お世話になります((。´・ω・)。´_ _))ペコ
お忙しい中たびたびの質問で本当申し訳ありませんです・・。ADOを使用したエクセルBOOKからデータを転記させるコードを使ってるのですが(参照bookはパスワードが掛かってるマクロ付きシートで拡張子はxlsです。マクロは見た感じピボットテーブルを更新する内容だったと思います。)自分で調べた結果パスワードが掛かってるbookは解除して開かないとADOで参照出来ない事が解かって解除するコードを組み込んで作成してみたところ無事データは取り込めたのですがデータを転記する実行側のVBAのコードを表示させた時に左側にありますプロジェクト‐VBAProjectに参照したBOOKのシート名やマクロが増植(コード実行する度に増殖されます)してしまいます。ちなみに転記する実行側の私が作成したBOOKを閉じると消えてます(保存しても残ってない)が何回か閉じずに使用していると「メモリが足りません」と表示されてしまいます。ADOはかなりPCのメモリを消費すると何かで読んだ記憶があるので頷けますが参照するシートのシートとマクロがプロジェクトに増えて行くのはあまり正常な状態ではなさそうなので回避する方法がありましたらご教授お願いします。(コードは確か下のように作ったと思います。データが会社にあるので案外若干違うかも知れません。パスとシート名は架空のものです。)
Sub ADOでパスワードの掛かったエクセルbookのデータを取得()
Dim myCon As New ADODB.Connection, myRS As New ADODB.Recordset, FileName As String
'接続先のExcelファイルとパスワード
FileName = ThisWorkbook.Path & "\xls\DataBook_pass.xls"
myPass = "password"
'エクセルファイルを開く (ファイルが開かれていないと接続できない)
Workbooks.Open FileName, Password:=myPass
'接続
myCon.Open "Provider=Microsoft.Jet.OLEDB.4.0;Extended Properties=Excel 8.0;" & _
"Data Source=" & FileName
MsgBox "Excelブックに接続完了!"

'「伝票一覧」シートの内容を読み込む
myRS.Open "[伝票一覧$]", myCon

'A1番地を基点に転記
Range("A1").CopyFromRecordset myRS

myRS.Close: Set myRS = Nothing
myCon.Close: Set myCon = Nothing
'Excelブックを閉じる
Workbooks("DataBook_pass.xls").Close
End Sub
(ADOはパスワード掛かって無いBOOKからは普通に使用して今までこの様な現象は無かったと思います)
ちなみに先日から質問させて頂いている内容もまだ解決しておりませんでしてお時間がある時に回答して頂けると非常に助かります。よろしくお願いします。((。´・ω・)。´_ _))ペコ
Posted by takoyakiudon at 2013年08月10日 04:50
こんにちは。takoyakiudon さん。

ちょっとスクロールが面倒になってきたんで、移動しませんか? にじいろあおむしのところです。
http://chobi2dataland.sblo.jp/article/44454186.html
Posted by ちょびちょび at 2013年08月15日 12:10
約1年ほど前にRaceTop10について、改変いただいたものです。その節はありがとうございました。
今更なのですが、データを見ていて気付いたのですが、左の方はレースタイムでソートされ、その後に上から、天気や風向き風速などが書き込まれているようで、正しい情報が入っていないようでした。
時間があれば、回収いただくことは可能でしょうか?
お忙しいとは思いますが、よろしくお願いいたします。
Posted by 通りすがり at 2014年04月29日 17:57
おはようございます。通りすがりさん。
大変失礼しました。検収作業が杜撰でしたねー。本日帰宅したら修正します。
Posted by ちょびちょび at 2014年04月30日 07:59
RaceTop10v3修正しました。元々はP列までしかデータが入っていなかったものが、改修してV列まで拡張されたのに、A1〜P最終行を選択してソート処理を行っていました。また、レースタイムが「. .」だと規格のH1800mが「.」になってしまっているバグも修正しました。現在ソート処理は削除して読み込んだままになってます。

http://www.bec-co.sakura.ne.jp/dataland/Repository.php
Posted by ちょびちょび at 2014年04月30日 23:21
お忙しい中修正いただきありがとうございました。
さっそくダウンロードさせていただきたいと思います。
Posted by 通りすがり at 2014年05月03日 19:30
コメントを書く
お名前:

メールアドレス:

ホームページアドレス:

コメント:

この記事へのトラックバックURL
http://blog.sakura.ne.jp/tb/39900949

この記事へのトラックバック