ここから本文です

excel VBAコードの記述について 以下のマクロを作成したいのですが、コードはど...

アバター

ID非公開さん

2020/1/1609:17:05

excel VBAコードの記述について

以下のマクロを作成したいのですが、コードはどのようにすればいいのでしょうか??

シート①のJ列(J6:J1005)の中で、セルの値に「test」と入っていれば、
シート①のG列(G6:G1005)の同じ行に入っている値を、
シート②のB列(B6:B1005)に代入する(同じ行ではなく、上から詰めて)。

例)
シート①のJ6:J1005の間で「test」が入っているのは
→J6:J8,J10:J12(J9はtestではない)とする。

シート①の上記範囲の行の、G列(G6:G12)に以下、
G6 あ
G7 い
G8 う
G9 え
G10 お
G11 か
G12 き

と入っていれば、

シート②のB列は
B6 あ
B7 い
B8 う
B9 お
B10 か
B11 き となる。
(J9がtestではないので、G9の値をB9に代入しない。G10・G11の値は、B10・B11ではなく上にずらして代入。)

分かりづらくてすみません、よろしくお願いします。

閲覧数:
119
回答数:
1
お礼:
100枚

違反報告

ベストアンサーに選ばれた回答

30246kikuさん

2020/1/1613:15:35

以下でどうなりますか

標準モジュールに以下を記述し、Samp1 を実行してみます

やっていることは

シート①で、指定行範囲の G、J 列を読み込み
J 列が test なら、G 列の値を上から詰め直し

シート②で、指定行範囲を綺麗にしてから、
上に詰めた分の G 列を書き出し

どうなりますか


Option Explicit

Public Sub Samp1()
   Dim vG As Variant, vJ As Variant
   Dim i As Long, k As Long

   With Worksheets("シート①").Rows("6:1005")
      vG = .Columns("G").Value
      vJ = .Columns("J").Value
   End With

   k = 0
   For i = 1 To UBound(vG)
      If (vJ(i, 1) = "test") Then
         k = k + 1
         vG(k, 1) = vG(i, 1)
      End If
   Next

   With Worksheets("シート②").Rows("6:1005")
      With .Columns("B")
         .ClearContents
         If (k > 0) Then .Resize(k).Value = vG
      End With
   End With
End Sub

アバター

質問した人からのコメント

2020/1/16 16:25:58

回答ありがとうございます!

この質問につけられたタグ

みんなで作る知恵袋 悩みや疑問、なんでも気軽にきいちゃおう!

Q&Aをキーワードで検索:

Yahoo! JAPANは、回答に記載された内容の信ぴょう性、正確性を保証しておりません。
お客様自身の責任と判断で、ご利用ください。
本文はここまでです このページの先頭へ

「追加する」ボタンを押してください。

閉じる

※知恵コレクションに追加された質問は選択されたID/ニックネームのMy知恵袋で確認できます。

不適切な投稿でないことを報告しました。

閉じる