[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]
『VBAのループ』(サルバさん)
Private Sub CommandButton1_Click()
Dim i As Long Dim j As Long
Dim SheetA As Worksheet, SheetB As Worksheet Set SheetA = ThisWorkbook.Worksheets("あ") Set SheetB = ThisWorkbook.Worksheets("い")
SheetB.Range("B3:K55").ClearContents SheetA.Select
For i = 3 To 55 If SheetA.Cells(i, 2) = "" Then Exit For ' End If If SheetA.Cells(i, 2) <> "" Then SheetA.Cells(i, 2).Select SheetB.Cells(i, 3) = SheetA.Cells(i, 2) End If
If SheetA.Cells(i, 3) <> "" Then Range(Cells(i, 4), Cells(i, 11)).Select SheetB.Range(Cells(i, 4), Cells(i, 11)) = SheetA.Range(Cells(i, 4), Cells(i, 11)) End If
Next i
SheetB.Select
End Sub
< 使用 Excel:Excel2013、使用 OS:Windows10 >
(マナ) 2016/05/21(土) 18:55
SheetB.Range(SheetB.Cells(i, 4), SheetB.Cells(i, 11)) = _ SheetA.Range(SheetA.Cells(i, 4), SheetA.Cells(i, 11))
こんな書き方もできます。
SheetB.Cells(i, 4).Resize(, 8) = SheetA.Cells(i, 4).Resize(, 8)
その他、なくても同じと思われる行を削除すると
Private Sub CommandButton1_Click() Dim i As Long Dim SheetA As Worksheet, SheetB As Worksheet
Set SheetA = ThisWorkbook.Worksheets("あ") Set SheetB = ThisWorkbook.Worksheets("い")
SheetB.Range("B3:K55").ClearContents
For i = 3 To 55 If SheetA.Cells(i, 2) = "" Then Exit For ' End If
SheetB.Cells(i, 3) = SheetA.Cells(i, 2)
If SheetA.Cells(i, 3) <> "" Then SheetB.Cells(i, 4).Resize(, 8) = SheetA.Cells(i, 4).Resize(, 8) End If Next i
SheetB.Select
End Sub
(マナ) 2016/05/21(土) 21:01
「シートAのB列」のデータが「シートBのC列」に取り込んだ後、
「シートAのC列からH列」のデータを「シートBのC列からH列」の同じ行に
取り込むコードの書き方がウェブサイトで調べて色々やって見るのですが、
分からなく教えて頂きたく宜しくお願いします。
(サルバより)
(サルバさん) 2016/05/22(日) 19:28
>「シートAのB列」のデータが「シートBのC列」に取り込んだ後、 >「シートAのC列からH列」のデータを「シートBのC列からH列」の同じ行に >取り込む
(マナ) 2016/05/22(日) 19:41
>「シートAのD列からH列」のデータを「シートBのD列からH列」の同じ行に 取り込むこむのです。(C列では無かったです、済みません) サイトで「Resize」を勉強しました。 宜しくお願いします。 (サルバさん) 2016/05/23(月) 09:44
> If SheetA.Cells(i, 3) <> "" Then
は、どんな意味かわかりますか。
この行で、何をしたかったのか説明お願いします。
(マナ) 2016/05/23(月) 20:39
コメント有難うございます。
余りの不出来さにお腹立ちなのではないかと申し訳なく思っております。
VBAを始めたばかりなのですが、必要があってVBAで
SheetAのデータをSheetBに取り込まなければいけなくなったのです。
最初コピペでやれば良いと思ったのですが、
データ数(行)が必ずしも毎回同じではないので、ループで取り込む方が良いのではと思い
つたない知識でコードを書いて見たのです。
If SheetA.Cells(i, 3) <> "" Then
は、「SheetAの(Ci)セルに何かが入っていたならば、その時は・・・」
と言う意味で書いたコードのつもりです。
VBAで完成させたい事は
?@シートBには、すでにデータが入っている時もあるのでそれを削除して、
シートAの2列目のデータをシートBの3列目に
?AシートAの3列目のデータをシートBの2列目に
?BシートAの4列目から11列目のデータをシートBの4列目から11列目に取り込む
コードを書きたいのです。
私は「Resize」と言うのを知らなかったのです。
?@と?Aは何とか動いたのですが
?Bが上手くいかなく困ってしまってこのサイトでお伺いした次第です。
宜しくお願いします。
(サルバさん) 2016/05/23(月) 22:41
>シートAの2列目のデータをシートBの3列目に >シートAの3列目のデータをシートBの2列目に
以下についても、説明お願いします。
>If SheetA.Cells(i, 3) <> "" Then >は、「SheetAの(Ci)セルに何かが入っていたならば、その時は・・・」 >と言う意味で書いたコードのつもりです。
その理解で間違ってはいません。 でも、
>VBAで完成させたい事は
の中に、そのことが出てこないのは何故でしょうか?
(マナ) 2016/05/23(月) 23:06
「シートA」のB列C列の項目が、「シートB」では入れ替わっているので、下記の様になるのです。
>シートAの2列目のデータをシートBの3列目に >シートAの3列目のデータをシートBの2列目に もし 「シートA」の項目が「シートB」の項目と同じで有れば 「シートA」のセル「B3」からセル「K最終行」のデータを 「シートB」のセル「B3」から「セルK最終行」に 取り込むだけで良いのですが・・・
マナ先生の下記のコメントは、私のPC出は消えていて分からないのですが、
何の中なのでしょうか?「コードの中」という意味でしょうか?
>VBAで完成させたい事は
の中に、そのことが出てこないのは何故でしょうか?
宜しくお願いします。
(サルバさん) 2016/05/24(火) 17:11
上記の通りだとするとこうなりますが、
どう違うか説明お願いします。
Private Sub CommandButton1_Click() Dim i As Long Dim SheetA As Worksheet, SheetB As Worksheet
Set SheetA = ThisWorkbook.Worksheets("あ") Set SheetB = ThisWorkbook.Worksheets("い")
SheetB.Range("B3:K55").ClearContents
SheetB.Range("C3:C55") = SheetA.Range("B3:B55") SheetB.Range("B3:B55") = SheetA.Range("C3:C55") SheetB.Range("D3:K55") = SheetA.Range("D3:K55")
SheetB.Select
End Sub
(マナ) 2016/05/24(火) 19:24
お送り頂いたコードでは SheetB.Range("B3:K55").ClearContents
だけが作動してデータが消えるだけすね。
ASheetB.Range("C3:C55") = SheetA.Range("B3:B55")
BSheetB.Range("B3:B55") = SheetA.Range("C3:C55") CSheetB.Range("D3:K55") = SheetA.Range("D3:K55")
は単にオブジェクトだけの記載なので(シートBのセルがシートAのどの
セルで有るかの説明) 何をするかと言うプロパティとメソッドが無いので、PCは私が何をした い か分からなく、PCは 作動できない訳ですね。
D SheetB.Select で、シートBを選択するというだけの動作で終わって
しまう。
私がやりたい事が記載されていないという訳ですね。
宜しくお願いします。
(サルバさん) 2016/05/24(火) 20:18
私は、本当に初心者なのです、。
「Resize」も 知らなたったのですから・・・
私がやりたい事が、どうして上手くいかなかったので、
このサイトでご質問をさせていただいたのです。
今も試行錯誤をしていて、解決出来ていないのです、
初回教えていただいた下記のコードでやって見ると、
確かに「シートAの1列毎のデータはAの2列目のデータは、
シートBの3列目に取り込めるのですが、
その後もう一作業がある、シートAのRange("D3:K55")までを
シートBのRange("D3:K55")までに取り込むことが上手くいかないのです。
下記の’(分からない所)、そこの所をお教えいただきたく宜しくお願いします。
Private Sub CommandButton1_Click() Dim i As Long Dim SheetA As Worksheet, SheetB As Worksheet
Set SheetA = ThisWorkbook.Worksheets("あ") Set SheetB = ThisWorkbook.Worksheets("い")
SheetB.Range("B3:K55").ClearContents For i = 3 To 55 If SheetA.Cells(i, 2) = "" Then Exit For ' End If
SheetB.Cells(i, 3) = SheetA.Cells(i, 2)
If SheetA.Cells(i, 3) <> "" Then End If ’(分からない所) ’If SheetA.Cells(i, 3) <> "" Thenb’SheetB.Cells(i, 4からK55).Resize(, 8) = SheetA.Cells(i, 4からKno55).Resize(, 8)
End If Next i
SheetB.Select
End Sub
(サルバ) 2016/05/25(水) 13:34
[ 一覧(最新更新順) ]
YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki.
Modified by kazu.