アプリ版:「スタンプのみでお礼する」機能のリリースについて

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

A 回答 (3件)

doの行をfor に置き換えて、


loopのところをnextに置き換えてください。
あと、i=i+1は削除。

スマホは打ちづらい…
    • good
    • 0
この回答へのお礼

回答ありがとうございました。

お礼日時:2016/12/17 15:28

質問を整理してください。



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で指定はできないのでしょうか?
    • good
    • 0
この回答へのお礼

セルA15~セルAD32だけをACCESSへ転送したいのです。
但し、セルA15~セルAD31 または、セルA15~セルAD30の時もありますので、セルA15~セルADの最終列と考えました。
i = 15を変更するとことで、可能なのかと思いました。

お礼日時:2016/12/16 12:39

質問者さんの「セル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)はどこを参照されたのか知りませんが、使っているサイトが見つかりません。


以上、参考になれば幸いです。
    • good
    • 0
この回答へのお礼

参考になりました。ありがとうございました。

お礼日時:2016/12/17 15:27

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!