![](http://oshiete.xgoo.jp/images/v2/pc/qa/question_title.png?e8efa67)
こんばんは、エクセル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 列に
に転記する作業が有ります。
なので、そちらも転記するためのコードの改変部分も教えて頂ければ嬉しく思います。
お手数ですが、詳しい方教えて頂けませんでしょうか。
※ また、データが重いので、出来れば高速で負担の掛からない形が理想なのですが。
どうぞよろしくお願いいたします。
![「エクセル マクロ データの条件検索と選択」の質問画像](http://oshiete.xgoo.jp/_/bucket/oshietegoo/images/media/a/424332_554a0b6889963/M.jpg)
No.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 に入れてループさせているのです。
詳しく教えていただき、どうもありがとうございます。
なんとなく知っているのと、自分でやってみるのとでは大きく違いますね。
読み解くのは得意なんですが、組み立てるのは苦手なんです、ですから勉強になります。
教えていただき、ありがとうございました!
No.3
- 回答日時:
再び#1です。
どうもどうも言葉足らずですみません。
>B列からであれば、コード内の cをbに書き換えれば良いと言う事でしょうか。
そうです。ただ、B列からということで、ここはループをさせるために列番号(数値)で処理
していますから、
For c=2 To 198 Step 28
としてください。
2というのはB列です。
列番号の表し方は以下です。
A列=1、B列=2、C列=3、・・・Z列=26、AA列=27・・・
いえいえ、教えていただきありがとうございます。
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)
変数みたくなるとさっぱりで、本当に感謝します、ありがとうございます。
No.2
- 回答日時:
#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 から見てください)
この近辺を見てみるとよいでしょう。
No.1
- 回答日時:
こんなのでどうでしょう。
----------------------------------------------------
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
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) 3つのプロシージャをまとめたら実行時エラー発生で対応不能 6 2022/05/17 01:47
- Visual Basic(VBA) VBAで、1つのエクセルで、2つのシートからもう1つのシートに条件のある転記コードを教えてください。 1 2023/03/16 18:07
- Excel(エクセル) Excel 値を返す数式についてです 3 2022/11/21 20:08
- Excel(エクセル) VLOOKUP が機能しない、その原因は何 ? 8 2022/10/19 12:06
- Visual Basic(VBA) vba 等間隔の列に対しての計算 6 2022/05/17 20:15
- Excel(エクセル) ある数値に対して、値を返す数式についてです 2 2022/09/13 22:06
- Visual Basic(VBA) 【VBA】データを入力後に,同一シート内に履歴として転記するVBAコードを教えていただきたいです。 3 2022/11/16 01:37
- Visual Basic(VBA) まとめシートから集計シートへA列のコードが一致したら1行コピーするマクロをネット上で見つけました。こ 1 2022/08/30 14:11
- その他(Microsoft Office) マクロVBAについて 1 2022/09/06 18:12
- Visual Basic(VBA) Excel(VBA) 特定の条件に該当する行の値、書式を同じセルにコピ&ペーストしたいです 1 2022/05/21 18:18
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
エクセルで離れた列を選択して...
-
VLOOKUPの列番号の最大は?
-
リストからデータを紐付けしたい
-
「段」と「行」の違いがよくわ...
-
列方向、行方向の定義
-
LEFT関数とIF関数の組み合わせ...
-
エクセル 重複 隣の列 一番...
-
CSVファイルの「0落ち」にVBA
-
エクセルマクロの組み方
-
【エクセルVBA】任意の画像フォ...
-
Alt+Shift+↑を一括で行うには、...
-
エクセル マクロ 範囲の値を上...
-
エクセルマクロで表の途中の集...
-
VBAで結合セルを転記する法を教...
-
【マクロ】【VBA】条件付き書式...
-
csvデータの列の入れ替えができ...
-
Excelの行数、列数を増やしたい...
-
エクセルのソートで、数字より...
-
ListViewで列を指定して表示さ...
-
Excel文字列一括変換
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
「段」と「行」の違いがよくわ...
-
エクセルで離れた列を選択して...
-
VLOOKUPの列番号の最大は?
-
LEFT関数とIF関数の組み合わせ...
-
再質問です。マクロの修正箇所...
-
VBA 指定した列にある日時デー...
-
列方向、行方向の定義
-
Alt+Shift+↑を一括で行うには、...
-
リストからデータを紐付けしたい
-
エクセルマクロの組み方
-
Excelの行数、列数を増やしたい...
-
エクセルで複数列の検索をマク...
-
CSVファイルの「0落ち」にVBA
-
VBAで結合セルを転記する法を教...
-
VBAで別ブックの列を検索し、該...
-
エクセルマクロPrivate Subを複...
-
データシートビューのタイトル...
-
エクセルでセル12個間隔で合...
-
エクセルで最初の行や列を開け...
-
エクセルで住所を県と市・郡と...
おすすめ情報
早速の回答を頂きまして、ありがとうございます。
実行してみました、マクロは最後まで実行できているのですが、数値が抜けてないようで、すべて空白のまま終わってしまうようです。
メッセージボックスが出るので最後まで動いている様なのですが。
理解不足でどこが障害になっているのか理解できませんが、どこかにお心当たりは有りませんでしょうか。
よろしくお願いいたします。
再度回答を頂きありがとうございます。
現状では、一番最初の B~G を I~N に転記する部分のみが空白のままで、以降は正常に転記できているようです。
また空白のままで終わってしまう、抜けていないの部分はB列~G列のデータが I~N列に転記されていないと言う事です。
他の部分は、転記先のエリアをクリアせずに再度ボタンクリックする事でデータが下行に増加して行っているのが原因だったようです、失礼いたしました。
ボタンクリックのすぐ後にクリアコンテンツを入れる事で、転記先のデータを毎回クリアすると正常表示されているようですが、やはりI列への転記のみが行われていないようです。
ご指摘頂きました、B列からであれば、コード内の cをbに書き換えれば良いと言う事でしょうか。
お手数ですが、教えて頂けませんでしょうか。
よろしくお願いいたします。