プロが教えるわが家の防犯対策術!

エクセルVBAに関してのご質問です。

一つのbookにア、イの2sheetがあるとします。

sheetアのA1セル~A4セルに①関東、関西、東北、九州などが記入され、B1セル~B4セルに②50、15、0、8などの数値が記入されます。

sheetイのZ1、Z3、Z5、Z7セル、、、、のような同列の一行飛ばしのセルに、①の文字を②の回数分、順番に表示させるにはどのように表現すればよろしいでしょうか。上記の例でいえば、まず関東をZ1、Z3、Z5、、、に50回入力し、その続きのセルに関西を15回入力していくイメージです。

質問者からの補足コメント

  • 迅速なご回答ありがとうございます。直ぐのご回答に驚きました。
    追加でご質問なのですが、シートイのZ列への表示の際、Z1ではなくZ7など列の途中から表示を開始する場合は、コードをどのように修正すればよろしいでしょうか。

      補足日時:2020/05/25 12:36
  • ありがとうございます。前よりコードの内容が理解できてきました。

    三度のご質問で恐縮ですが、参照するsheetアのA1~A4、B1セル~B4セルのそれぞれについても列の途中からの場合の指定方法についてご教示いただけませんでしょうか。

    例えば、sheetアの(A1~A5及びB1~B5には他の不必要な値が入っているので飛ばして)A6~A9、B6~B9を参照する場合です。

      補足日時:2020/05/25 21:59

A 回答 (4件)

こんにちは!



Sub Sample2()
 Dim i As Long, k As Long, cnt As Long
 Dim wS As Worksheet
  Set wS = Worksheets("ア")
   With Worksheets("イ")
    .Range("Z:Z").ClearContents
     For i = 1 To wS.Cells(Rows.Count, "A").End(xlUp).Row
      If wS.Cells(i, "B") > 0 Then
       For k = 1 To wS.Cells(i, "B")
        cnt = cnt + 1
         .Cells(cnt * 2 - 1, "Z") = wS.Cells(i, "A")
       Next k
      End If
     Next i
   End With
End Sub

こんな感じですかね。m(_ _)m
    • good
    • 0
この回答へのお礼

ありがとうございました。度々の質問にもご丁寧に回答いただき感謝申し上げます。

お礼日時:2020/05/25 23:02

>例えば、sheetアの(A1~A5及びB1~B5には他の不必要な値が入っているので飛ばして)A6~A9、B6~B9を参照する場合です。



6行目~9行目というのは固定ですかね?

No.2のコード内の
>For i = 1 To wS.Cells(Rows.Count, "A").End(xlUp).Row
の部分が「1行目~A列のデータが入っている最終行まで」というループになりますので、
ココを6~9に変更すれば大丈夫です。

>For i = 6 To 9
とするだけです。m(_ _)m
    • good
    • 0

No.2です。



>Z1ではなくZ7など列の途中から・・・

単に行合わせだけの問題になります。
OFFSETを使っても良いですが、前回のコードをそのまま利用すると
>.Cells(cnt * 2 - 1, "Z") = wS.Cells(i, "A")

>.Cells(cnt * 2 - 1 + 6, "Z") = wS.Cells(i, "A")
に変えるだけ、すなわち

>.Cells(cnt * 2 + 5, "Z") = wS.Cells(i, "A")

にするだけです。

※ 一旦Z列のデータを消去するようにしていますが、
消去不要なら
>.Range("Z:Z").ClearContents
を消してください。m(_ _)m
    • good
    • 0

こんにちは



指定行のA列、B列の値を基に処理するものを作成しておいて、それを1~4行まで繰り返すようにすれば良いでしょう。
    • good
    • 0

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

このQ&Aを見た人はこんなQ&Aも見ています


このQ&Aを見た人がよく見るQ&A

人気Q&Aランキング