Excel2010とACCESS2010を利用してます。
セルA15~セルAD32までをExcelからACCESSへエクスポートしたいと思っています。
質問内容は下記コードの
i = 15 の部分です。
セルA23からセルA50にもエクスポートしないデータがありますので、セルA15から最終列(ただし、セルA32まで)のコードを書きたいのです。
i = 1 To .Cells(.Rows.count, 1).End(c_xlUp).Row
エラーで動きません。
多分、セルA32以下のデータも読み込みしているからでしょうか?
妥協して、
for i = 5 to 32
forに対してのnextがありません。いろいろな場所にnextを書き込みましたがエラーが解消できませんでした。
i = 15の部分ですが、どのように変更するのかお手数ですが、ご教示いただけないでしょうか?
以下 Excel側のVBAです。
Sub aaaa()
Dim con As New ADODB.Connection
Dim rs As New ADODB.Recordset
Dim conStr As String
conStr = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=C:\Users\P125028\Desktop\ああああ"
con.Open ConnectionString:=conStr
rs.Open Source:="MT_いいい", ActiveConnection:=con, _
CursorType:=adOpenKeyset, LockType:=adLockOptimistic
Dim i As Long
i = 15
With rs
Do Until Cells(i, 1) = ""
.AddNew
.Fields("A").Value = Cells(i, 1)
.Fields("B").Value = Cells(i, 2)
.Fields("C").Value = Cells(i, 3)
.Fields("D").Value = Cells(i, 4)
.Fields("E").Value = Cells(i, 5)
.Fields("F").Value = Cells(i, 6)
.Fields("G").Value = Cells(i, 7)
.Fields("H").Value = Cells(i, 8)
.Fields("I").Value = Cells(i, 9)
.Fields("J").Value = Cells(i, 10)
.Fields("K").Value = Cells(i, 11)
.Fields("L").Value = Cells(i, 12)
.Fields("M").Value = Cells(i, 13)
.Fields("N").Value = Cells(i, 14)
.Fields("O").Value = Cells(i, 15)
.Fields("P").Value = Cells(i, 16)
.Fields("Q").Value = Cells(i, 17)
.Fields("R").Value = Cells(i, 18)
.Fields("S").Value = Cells(i, 19)
.Fields("T").Value = Cells(i, 20)
.Fields("U").Value = Cells(i, 21)
.Fields("V").Value = Cells(i, 22)
.Fields("W").Value = Cells(i, 23)
.Fields("X").Value = Cells(i, 24)
.Fields("Y").Value = Cells(i, 25)
.Fields("Z").Value = Cells(i, 26)
.Fields("AA").Value = Cells(i, 27)
.Fields("AB").Value = Cells(i, 28)
.Fields("AC").Value = Cells(i, 29)
.Fields("AD").Value = Cells(i, 30)
.Update
i = i + 1
Loop
End With
rs.Close
con.Close
End Sub
No.2
- 回答日時:
質問を整理してください。
Excelのsheet上の
行番号 15~?
列範囲 「A~AD」
の内容を
それぞれの列名(A・・・AA・・AD)と同じフィールド名の準備された
ACCESSへエクスポートしたい。
ただし、行番号 23~50 を除く
エクスポートしたい「全体の行範囲」及び「除きたい行範囲」が不明確です。
>セルA15~セルAD32までをExcelからACCESSへエクスポートしたいと思っています。
>セルA23からセルA50にもエクスポートしないデータがありますので、セルA15から最終列(ただし、セルA32まで)
>i = 15の部分ですが、どのように変更するのかお手数ですが、ご教示いただけないでしょうか?
開始行が15行目であれば、初期値としては正解です。
除きたい行の対策は、ifで対応するしかないと思います。
1.処理を囲む
if i<23 or i>50 then
.AddNew
・・・
.Update
end if
2.除きたい場合をスキップ
if i>=23 and i<=50 then goto skip_label
AddNew
・・・
.Update
skip_label:’移動したい行にラベルをして、ここにスキップ
i = i + 1
3.iの増加分を変える
.Update
if i=22 then
i = i + 29 ’22行目が終わったら、51行目へ
else
i = i + 1 ’それ以外は次の行へ
end if
等・・・
追伸
「.Fields」はindexで指定はできないのでしょうか?
セルA15~セルAD32だけをACCESSへ転送したいのです。
但し、セルA15~セルAD31 または、セルA15~セルAD30の時もありますので、セルA15~セルADの最終列と考えました。
i = 15を変更するとことで、可能なのかと思いました。
No.3ベストアンサー
- 回答日時:
質問者さんの「セルAD32」が、VBAでの「Cells(32, 30)」と同じところを表しているのはわかりますか?
どうも行と列の意味が曖昧で説明しにくいのですが、
縦方向の数字=行番号
横方向=列
です。
「Cells」の場合は(行番号,列番号)になりますので、
>i=15
>Do Until Cells(i, 1) = ""
>...
>i=i+1
>loop
「15行目から開始して、1列目(=A列)が ””(=何も入力されていない状態)になるまで、1行ずつかえながら次の作業をしなさい。」
という意味です。
もし、A列に余分なデータが存在し判別に使用できないが、AD列に空白行が無いのであれば、
「Do Until Cells(i, 1) = ""」を「Do Until Cells(i, 32) = ""」とすれば良いのです。
また、行番号の最大値が 32 とわかっているならば、No.1さんの回答のように「for_next」が一番楽です。
終わりの条件を設定して、「Exit for」すれば良いのです。
最終行を先に設定するのであれば、下記のurlが参考になると思います。
http://www.niji.or.jp/home/toru/notes/8.html
次に
>i = 1 To .Cells(.Rows.count, 1).End(c_xlUp).Row
>エラーで動きません。
問題点
1.書き忘れと思いますが、「for」がありません。
2.初期値は「15」ですので、「for i=15 to ・・・」となります。
2.「.Cells(.Rows.count, 1).End(c_xlUp).Row」は、「With」の指定はしているのでしょうか? または 最初の「.」が不要です。
3.「.End(c_xlUp)」の(c_xlUp)はどこを参照されたのか知りませんが、使っているサイトが見つかりません。
以上、参考になれば幸いです。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) VBA 別ブックからの転記の高速化について VBA 別ブックからの転記の高速化についてご教授下さい。 19 2022/07/26 13:07
- Excel(エクセル) なぜExit Subがあるのかわかりません 4 2023/02/19 12:34
- Visual Basic(VBA) VBA処理追加 こちらでご教示頂いたのですが回答完了させてしまいましたのでこちらからまた質問させてく 2 2022/10/27 09:57
- Excel(エクセル) VBAの指示の内容 昨日こちらでご教示頂いたのですが初心者な為、一つ一つの指示が何をやっているのかわ 2 2022/10/25 18:08
- Visual Basic(VBA) vbaを早くしたい 5 2022/09/09 10:58
- C言語・C++・C# C# DatagridviewにExcelシートを反映するとエラーが出る 2 2023/05/06 17:12
- Visual Basic(VBA) Excelで下記のようにマクロを作ったところ、一回目は実行できたのですが、二回目以降「実行時エラー1 1 2022/03/25 08:08
- Visual Basic(VBA) Accessフォームで全レコードを指定のExcelのセルへ転送し印刷する方法について 2 2022/09/08 18:23
- Visual Basic(VBA) VBAコードが作動せず、どこに問題があるのか教えて下さい。 3 2023/06/13 13:20
- Visual Basic(VBA) VBA チェックボックスで 5 2023/05/31 17:10
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
エクセル マクロ オートフィ...
-
excel 小さすぎて見えないセル...
-
excelのデータで色つき行の抽出...
-
エクセルで特定の文字列が入っ...
-
【Excel関数】UNIQUE関数で"0"...
-
結合されたセルをプルダウンの...
-
[EXCEL]ボタン押す→時刻が表に...
-
エクセル 上下で列幅を変えるには
-
アクティブになっている行をマ...
-
特定の文字がある行以外を削除...
-
AのセルとB行を比較して、一致...
-
Excel グラフのプロットからデ...
-
EXCELで最後の行を固定
-
セルの色によって条件文をつけ...
-
エクセル マクロ等を利用した各...
-
Excel2007で、指定範囲の行高さ...
-
エクセル マクロで数値が変っ...
-
Excelマクロ 期間を指定してデ...
-
貼り付けた数式を最終行まで繰...
-
Excel VBA アクティブセルから...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
エクセルで特定の文字列が入っ...
-
エクセル マクロ オートフィ...
-
【Excel関数】UNIQUE関数で"0"...
-
[EXCEL]ボタン押す→時刻が表に...
-
結合されたセルをプルダウンの...
-
エクセル マクロで数値が変っ...
-
Excel グラフのプロットからデ...
-
AのセルとB行を比較して、一致...
-
エクセル 上下で列幅を変えるには
-
Excel ウインドウ枠の固定をす...
-
特定の文字がある行以外を削除...
-
excelのデータで色つき行の抽出...
-
エクセル2016で時間を入力して...
-
excel 小さすぎて見えないセル...
-
EXCELで最後の行を固定
-
エクセルVBA 最終行を選んで並...
-
VBAで色の付いているセルの行削除
-
エクセルマクロで偶数行(又は...
-
エクセルのセルに指定画像(.jpg...
-
罫線の斜線を自動で引くマクロ
おすすめ情報