[[20160521182917]] 『VBAのループ』(サルバさん) ページの最後に飛ぶ

[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]

 

『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 >


コードだけでは、何を質問したいのかわかりませんが、
すべてのCellsの前に、SheetA.とかSheetB.が必要ですよ。

(マナ) 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の複数列の複数行」を「シートBの同じ列に」取り込む書き方が分からないのです。

「シート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のB列」のデータが「シートBのC列」に取り込んだ後、
 >「シート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


> VBAで完成させたい事は
> 1)シートBには、すでにデータが入っている時もあるのでそれを削除して
> 2)シートAの2列目のデータをシートBの3列目に
> 3)シートAの3列目のデータをシートBの2列目に
> 4)シートAの4列目から11列目のデータをシートBの4列目から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


ん?わかっているなら修正すればよいのに。
もしかして。からかわれていただけ?
(マナ) 2016/05/24(火) 20:31

 マナ先生

 私は、本当に初心者なのです、。
 「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.