OS:Windows10 Pro 64bit
Office2016 Home & Business Premium
Excel2016で郵便番号を入れただけで住所を出力する方法を教えてください。
9F:9I 郵便番号、9J:9Z 住所
Microsoft IMEIMEのシステム辞書には郵便番号辞書は入っています。
出来れば関数を使った方法はないでしょうか?
アクセスからエクセルへ
Sub Sample()
Dim cn As Object
Dim rs As Object
Set cn = CreateObject("ADODB.Connection")
With cn
.Provider = "Microsoft.ACE.OLEDB.12.0"
.Properties("Extended Properties") = "Excel 12.0"
.Properties("Data Source") = "D:\Book1.xlsx"
.Open
End With
Set rs = CreateObject("ADODB.Recordset")
rs.Open "SELECT * FROM [sheet1$]", cn, 3
Debug.Print rs.RecordCount
rs.Close: cn.Close
Set rs = Nothing : Set cn = Nothing
End Sub
このコードでシートの行数を取得してるのですが
このコードを実行後もファイルが開いたままなのですが
閉じるにはどうすればいいのでしょうか?
.Openでファイルが開くので
cn.Close
でファイルが閉じるのかと思ったら閉じません。
cn.Quitを追記してみましたが
実行時エラー -2147467259
選択クエリを実行できません。
となりました。
どうすればファイルを閉じることが出来るのでしょうか?
以下のエクセルVBAを組んでいるのですが、処理の速度をあげたいです。
無駄な記述があると思うのですが、調べても試行錯誤しても、上手くいきません。
処理速度をあげる記述をご教示願います。よろしくお願い申し上げます。
※別ファイルのAccessファイルをデータベースとして、「今年」テーブルと、「前年」テーブルそれぞれから条件抽出して、受注数量を合計させるものです。
※SQLのVBAです。なお、実際ファイルのVBAは、以下記述の5倍量あります(内容は、セル範囲が違うだけで同じ。現在速度:約30秒)。
※「配列」というのを活用すれば速くなるようなのですが、理解できませんでした。。。
ーーーー【以下、VBA】-----------
Sub DSUM集計()
Application.ScreenUpdating = False
Dim db As ADODB.Connection
Dim rs As ADODB.Recordset
Dim mySQL As String
Dim cmd As ADODB.Command
Dim AA As Variant
AA = "AND 営業箇所" & Range("C13") & " AND 拒 IS NULL AND 販売伝票 <" & Range("D13") & " AND 品名 " & Range("E13") & " AND 得意先名 " & Range("F13") & " AND 請求先名 " & Range("G13") & " AND 出荷先名 " & Range("H13")
Set db = New ADODB.Connection
db.Provider = "Microsoft.Ace.OLEDB.12.0"
db.Open "\\▲▲▲\ACCESS.accdb"
With Worksheets("補助計算")
mySQL = " SELECT SUM(受注数量) FROM 今年 "
mySQL = mySQL & "WHERE 納入期日=" & Range("B13") & AA
Set rs = New ADODB.Recordset
Set cmd = New ADODB.Command
Set cmd.ActiveConnection = db
cmd.CommandText = mySQL
Set rs = cmd.Execute
Range("I13").CopyFromRecordset rs
mySQL = " SELECT SUM(受注数量) FROM 今年 "
mySQL = mySQL & "WHERE 納入期日=" & Range("B14") & AA
Set rs = New ADODB.Recordset
Set cmd = New ADODB.Command
Set cmd.ActiveConnection = db
cmd.CommandText = mySQL
Set rs = cmd.Execute
Range("I14").CopyFromRecordset rs
mySQL = " SELECT SUM(受注数量) FROM 前年 "
mySQL = mySQL & "WHERE 納入期日=" & Range("K14") & AA
Set rs = New ADODB.Recordset
Set cmd = New ADODB.Command
Set cmd.ActiveConnection = db
cmd.CommandText = mySQL
Set rs = cmd.Execute
Range("M14").CopyFromRecordset rs
mySQL = " SELECT SUM(受注数量) FROM 前年 "
mySQL = mySQL & "WHERE 納入期日=" & Range("K15") & AA
Set rs = New ADODB.Recordset
Set cmd = New ADODB.Command
Set cmd.ActiveConnection = db
cmd.CommandText = mySQL
Set rs = cmd.Execute
Range("M15").CopyFromRecordset rs
rs.Close
Set rs = Nothing
Set db = Nothing
Application.ScreenUpdating = True
End With
End Sub
ーーーーーーーーーーーーーーーーーーーー
以上
以下のエクセルVBAを組んでいるのですが、処理の速度をあげたいです。
無駄な記述があると思うのですが、調べても試行錯誤しても、上手くいきません。
処理速度をあげる記述をご教示願います。よろしくお願い申し上げます。
※別ファイルのAccessファイルをデータベースとして、「今年」テーブルと、「前年」テーブルそれぞれから条件抽出して、受注数量を合計させるものです。
※SQLのVBAです。なお、実際ファイルのVBAは、以下記述の5倍量あります(内容は、セル範囲が違うだけで同じ。現在速度:約30秒)。
※「配列」というのを活用すれば速くなるようなのですが、理解できませんでした。。。
ーーーー【以下、VBA】-----------
Sub DSUM集計()
Application.ScreenUpdating = False
Dim db As ADODB.Connection
Dim rs As ADODB.Recordset
Dim mySQL As String
Dim cmd As ADODB.Command
Dim AA As Variant
AA = "AND 営業箇所" & Range("C13") & " AND 拒 IS NULL AND 販売伝票 <" & Range("D13") & " AND 品名 " & Range("E13") & " AND 得意先名 " & Range("F13") & " AND 請求先名 " & Range("G13") & " AND 出荷先名 " & Range("H13")
Set db = New ADODB.Connection
db.Provider = "Microsoft.Ace.OLEDB.12.0"
db.Open "\\▲▲▲\ACCESS.accdb"
With Worksheets("補助計算")
mySQL = " SELECT SUM(受注数量) FROM 今年 "
mySQL = mySQL & "WHERE 納入期日=" & Range("B13") & AA
Set rs = New ADODB.Recordset
Set cmd = New ADODB.Command
Set cmd.ActiveConnection = db
cmd.CommandText = mySQL
Set rs = cmd.Execute
Range("I13").CopyFromRecordset rs
mySQL = " SELECT SUM(受注数量) FROM 今年 "
mySQL = mySQL & "WHERE 納入期日=" & Range("B14") & AA
Set rs = New ADODB.Recordset
Set cmd = New ADODB.Command
Set cmd.ActiveConnection = db
cmd.CommandText = mySQL
Set rs = cmd.Execute
Range("I14").CopyFromRecordset rs
mySQL = " SELECT SUM(受注数量) FROM 前年 "
mySQL = mySQL & "WHERE 納入期日=" & Range("K14") & AA
Set rs = New ADODB.Recordset
Set cmd = New ADODB.Command
Set cmd.ActiveConnection = db
cmd.CommandText = mySQL
Set rs = cmd.Execute
Range("M14").CopyFromRecordset rs
mySQL = " SELECT SUM(受注数量) FROM 前年 "
mySQL = mySQL & "WHERE 納入期日=" & Range("K15") & AA
Set rs = New ADODB.Recordset
Set cmd = New ADODB.Command
Set cmd.ActiveConnection = db
cmd.CommandText = mySQL
Set rs = cmd.Execute
Range("M15").CopyFromRecordset rs
rs.Close
Set rs = Nothing
Set db = Nothing
Application.ScreenUpdating = True
End With
End Sub
ーーーーーーーーーーーーーーーーーーーー
以上