これ何て呼びますか

こんばんは、エクセル2010を使っていて、マクロでの数値の検索と応用で一人では無理な事が出てきたので教えて頂けませんでしょうか。

画像の様なデータが有り、B10セルとC10セルの間の数値をB列から探し、該当する行を I11の上から順にデータが有る限り、ボタンクリックで転記したいと思います。

また、画像を1項目分として、同じ形式で8項目分

AD~AI を AK~AP 列に
BF~BK を BM~BR 列に
CH~CM を CO~CT 列に
DJ~DO を DQ~DV 列に
EL~EQ を ES~EX 列に
FN~FS を FU~FZ 列に
GP~GU を GW~HB 列に

に転記する作業が有ります。

なので、そちらも転記するためのコードの改変部分も教えて頂ければ嬉しく思います。

お手数ですが、詳しい方教えて頂けませんでしょうか。

※ また、データが重いので、出来れば高速で負担の掛からない形が理想なのですが。

どうぞよろしくお願いいたします。

「エクセル マクロ データの条件検索と選択」の質問画像

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

  • 早速の回答を頂きまして、ありがとうございます。

    実行してみました、マクロは最後まで実行できているのですが、数値が抜けてないようで、すべて空白のまま終わってしまうようです。

    メッセージボックスが出るので最後まで動いている様なのですが。

    理解不足でどこが障害になっているのか理解できませんが、どこかにお心当たりは有りませんでしょうか。

    よろしくお願いいたします。

    No.1の回答に寄せられた補足コメントです。 補足日時:2015/05/06 23:05
  • 再度回答を頂きありがとうございます。

    現状では、一番最初の B~G を I~N に転記する部分のみが空白のままで、以降は正常に転記できているようです。

    また空白のままで終わってしまう、抜けていないの部分はB列~G列のデータが I~N列に転記されていないと言う事です。

    他の部分は、転記先のエリアをクリアせずに再度ボタンクリックする事でデータが下行に増加して行っているのが原因だったようです、失礼いたしました。

    ボタンクリックのすぐ後にクリアコンテンツを入れる事で、転記先のデータを毎回クリアすると正常表示されているようですが、やはりI列への転記のみが行われていないようです。

    ご指摘頂きました、B列からであれば、コード内の cをbに書き換えれば良いと言う事でしょうか。

    お手数ですが、教えて頂けませんでしょうか。

    よろしくお願いいたします。

    No.2の回答に寄せられた補足コメントです。 補足日時:2015/05/06 23:58

A 回答 (4件)

>以下の部分のcの文字はそのままで良いのですよね?



はい、大丈夫ですよ。

ここは、cが順次、2(B列)、30(AD列)、58(BF列)・・・と変わっていきます。
下限値は、1組目ではB列(2)に入ってますし、2組目ではAD列(30)、3組目ではBF列(58)・・・。
上限値は、1組目ではC列(3)、2組目は、AE列(31)、3組目はBG列(59)・・・。

上限、下限はいずれも必ず10行目。
Cells方式での表し方は、Cells(行番号、列番号)ですから、
Kagen=Cells(10,c)
Jogen=Cells(10,c+1)  なのです。

上限も下限もその都度、右にずれていってもらわねば困るので、変数 c に入れてループさせているのです。
    • good
    • 0
この回答へのお礼

詳しく教えていただき、どうもありがとうございます。

なんとなく知っているのと、自分でやってみるのとでは大きく違いますね。

読み解くのは得意なんですが、組み立てるのは苦手なんです、ですから勉強になります。

教えていただき、ありがとうございました!

お礼日時:2015/05/07 00:44

再び#1です。



どうもどうも言葉足らずですみません。

>B列からであれば、コード内の cをbに書き換えれば良いと言う事でしょうか。

そうです。ただ、B列からということで、ここはループをさせるために列番号(数値)で処理
していますから、

For c=2 To 198 Step 28

としてください。
2というのはB列です。
列番号の表し方は以下です。
A列=1、B列=2、C列=3、・・・Z列=26、AA列=27・・・
    • good
    • 0
この回答へのお礼

いえいえ、教えていただきありがとうございます。

For c=2 To 198 Step 28 の部分のみを書き換える事で、無事抽出してくれました!


以下の部分のcの文字はそのままで良いのですよね?

Kagen = Cells(10, c): Jogen = Cells(10, c + 1)

r = 11
Do While Cells(r, c).Value <> ""
If Cells(r, c).Value >= Kagen And Cells(r, c).Value <= Jogen Then
Lstrow = Cells(Rows.Count, c + 7).End(xlUp).Row + 1
If Lstrow = 2 Then Lstrow = 11

Range(Cells(r, c), Cells(r, c + 5)).Copy Cells(Lstrow, c + 7)

変数みたくなるとさっぱりで、本当に感謝します、ありがとうございます。

お礼日時:2015/05/07 00:11

#1の者です。



わたしの手元のダミーデータでは正常作動したのですが・・。
ちなみに先ほどのコードの流れをざっくり示します。
-----------------------------------------------------------------
c : 列番。 For c=30 to 198 Step 28 というのは、AD列からGP列までのループ
Kagen,Jogen :それぞれのデータの組における、データ下限値、上限値を変数に入れている
r: 行番。11行目から下に、データがあるだけループ。
ひとつずつ下限、上限の間にあるかを判定する条件分岐を行っている。
もしもこの条件を満たすようならば、指定された列にデータを貼っているが、
その時に貼り付ける行を Lstrow で取得している。
-------------------------------------------------------------------

いま書いてて思いましたが、ひょっとしてB列からでしたか?
だとしたら、cのループのところをいじってもらえれば終わりです。
2からです。

ただ、「すべて空白のまま終わってしまう」ということなので、ちょっと違うかもしれません。
また、「数値が抜けてないよう」とはどのような状態でしょうか。

-------------------------------------------------------------------

このような時は、ちょっと動きを確認してみてください。

① VBE(マクロ画面)で、表示(V) > ローカルウィンドウ(S)
② コード(Sub ~ End Sub)の間に、どこでもいいのでカーソルを移動
③ F8キーを押す
  コードが一行ずつ実行され、その時に入っている変数の値がローカルウィンドウで
 確認できます。
④ F8を何度も押しながら、変数の推移を確認していくと要因が判明することが多いです。
 特に最初の、転記すべき値のところ、(cとr から見てください)
 この近辺を見てみるとよいでしょう。
この回答への補足あり
    • good
    • 0

こんなのでどうでしょう。



----------------------------------------------------
Sub pppppp()
Dim r As Long, c As Integer
Dim Lstrow As Long
Dim Kagen As Single, Jogen As Single

For c = 30 To 198 Step 28
   Kagen = Cells(10, c): Jogen = Cells(10, c + 1)

   r = 11
   Do While Cells(r, c).Value <> ""
      If Cells(r, c).Value >= Kagen And Cells(r, c).Value <= Jogen Then
         Lstrow = Cells(Rows.Count, c + 7).End(xlUp).Row + 1
          If Lstrow = 2 Then Lstrow = 11

            Range(Cells(r, c), Cells(r, c + 5)).Copy Cells(Lstrow, c + 7)
           End If
      r = r + 1
   Loop
Next c

MsgBox "End."

End Sub
この回答への補足あり
    • good
    • 0

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