VBAを使って毎回データが違っても応用できるコード

このQ&Aのポイント
  • VBAを活用して、毎回データが異なる場合でも応用できるコードを作成する方法について質問します。
  • 具体的な手順は、O列をフィルタで昇順にし、2以上の数値(#N/Aも含む)が入った行のP列をコピーして、同じ行のQ列に値でペーストします。
  • また、ペーストされた値は赤い文字で表示することで、見やすくすることができます。
回答を見る
  • ベストアンサー

VBA 毎回データが違っても応用できるコード2

先ほどの回答をありがとうございました。 https://okwave.jp/qa/q9539233.html 手順が違っていましたので、再度質問させて頂きたいと思います。宜しくお願いします。 O列をフィルタで昇順にします。 2以上の数値(#N/Aも含む)が入った行のP列をコピーして同じ行のQ列に値でペーストするといった流れです。 見やすくするため、ペーストしたものは赤い文字にしてくれたらありがたいです。 O列    P列    Q列 2     79     79 2     79     79 3     #N/A    #N/A 4     #N/A    #N/A 5     80     80 8     80     80 8     80     80 10     80    80 11     80    80 18     #N/A   #N/A #N/A    84    84 #N/A    80    80       ↑    ↑      コピー  値でペースト

  • nkmyr
  • お礼率67% (403/600)

質問者が選んだベストアンサー

  • ベストアンサー
  • watabe007
  • ベストアンサー率62% (476/760)
回答No.1

Sub Test()   Dim LR As Long, i As Long   'O列の最終行を検出   LR = Cells(Rows.Count, "O").End(xlUp).Row   'O列からQ列の範囲をO列をキーに昇順で並び替え   ActiveSheet.Range("O1:Q" & LR).Sort _   Key1:=Range("O1"), Order1:=xlAscending, Header:=xlYes   '2以上の行を検出   For i = 2 To LR     If Cells(i, "O").Value >= 2 Then Exit For   Next   Range(Cells(i, "P"), Cells(LR, "P")).Copy   Cells(i, "Q").PasteSpecial Paste:=xlPasteValues   Range(Cells(i, "Q"), Cells(LR, "Q")).Font.Color = vbRed   Application.CutCopyMode = False End Sub

nkmyr
質問者

お礼

毎回教えて頂き、ありがとうございます! おかげ様でうまくいけました。 またお世話になるかと思います。 その時は宜しくお願いします。

関連するQ&A

  • VBA 毎回データが違っても応用できるコード

    O列をフィルタで昇順にして、2以上の数値(#N/Aも含む)をコピーして同じ行のQ列に値でペーストするといった流れです。 下記のコードはマクロで記録で作成したものです。 Range("O632:O705").Select O632から最後尾のO705までのセルをコピー  Range("Q632").Select 同じ行のQ632セルを選択し、値でペーストする。 データは毎回バラバラなので (O400~O800だったり)、応用できるコードを教えて頂けないでしょうか? 宜しくお願いします。     ActiveWorkbook.Worksheets("シート1").AutoFilter.Sort.SortFields.Clear     ActiveWorkbook.Worksheets("シート1").AutoFilter.Sort.SortFields.Add Key:= _         Range("O1:O705"), SortOn:=xlSortOnValues, Order:=xlAscending, DataOption _         :=xlSortNormal     With ActiveWorkbook.Worksheets("シート1").AutoFilter.Sort         .Header = xlYes         .MatchCase = False         .Orientation = xlTopToBottom         .SortMethod = xlPinYin         .Apply     End With     Range("O632:O705").Select     Selection.Copy     ActiveWindow.SmallScroll Down:=-48     Range("Q632").Select     Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _         :=False, Transpose:=False     ActiveWindow.SmallScroll Down:=56 End Sub

  • 不要なデータを切り取って別のシートに貼りつける

    シート1に色々なデータが並べています。A列~J列、5000行くらいです。 J列に「0」「1」「#N/A」の三つの値がバラバラに並べています。 フィルタで昇順にし、「0」「1」「#N/A」と奇麗に並べます。 「0」と「#N/A」の行を切り取ってシート2へ貼り付けます。 そして次にG列に「ダウンロード」以外の文字があった場合も同様に切り取ってシート2に貼り付ける といった作業をしています。作業が大変なので、マクロで実行したいのですが、コードの記述が分からないのです。教えて下さい。 宜しくお願いします。

  • エクセルVBAのコードの書き方を教えてください

    エクセルVBAの初心者です。 下記①-⑲のようなコードを書きたいのですが、どなたかお分かりになる方がいましたら、 ご教示いただけますと幸いです。 ① オートフィルターでシート[list]のA列に"●"がある特定の行だけを以下作業の対象にしたい ② ①で特定した行のE列セルの値を、シート[output]のB9セルにコピペする ③ ①で特定した行のF列セルの値を、シート[output]のB12セルにコピペする ④ ①で特定した行のG列セルの値を、シート[output]のB15セルにコピペする ⑤ ①で特定した行のH列セルの値を、シート[output]のB18セルにコピペする ⑥ ①で特定した行のI列セルの値を、シート[output]のB21セルにコピペする ⑦ ①で特定した行のJ列セルの値を、シート[output]のB24セルにコピペする ⑧ ①で特定した行のK列セルの値を、シート[output]のB27セルにコピペする ⑨ ①で特定した行のL列セルの値を、シート[output]のB30セルにコピペする ⑩ ①で特定した行のM列セルの値を、シート[output]のB33セルにコピペする ⑪ ①で特定した行のN列セルの値を、シート[output]のB36セルにコピペする ⑫ ①で特定した行のO列セルの値を、シート[output]のB39セルにコピペする ⑬ ①で特定した行のP列セルの値を、シート[output]のB42セルにコピペする ⑭ ①で特定した行のQ列セルの値を、シート[output]のB45セルにコピペする ⑮ ①で特定した行のR列セルの値を、シート[output]のB48セルにコピペする ⑯ ①で特定した行のS列セルの値を、シート[output]のB51セルにコピペする ⑰ ①で特定した行のT列セルの値を、シート[output]のB54セルにコピペする ⑱ ①で特定した行のU列セルの値を、シート[output]のB57セルにコピペする ⑲ シート[output]のB3:B59をテキストファイルを呼び出してコピペする ※このとき、上記②-⑱で記述したB9からB57のセルには改行が含まれる場合が  あるため、テキストファイルへのペースト時に""が表示されてしまうが、  もし可能であれば、この""が表示されないようにしたい。

  • Excelについて。【再々】

    何度も何度も申し訳ございません。 これで伝わらなければもう大丈夫です。すみません。 D列を昇順→A列を昇順→A列の数値が変わるところに1行挿入し、A列が同じ数値ごとに、BとC列だけにフィルターをかけなおし、B列を昇順→C列を昇順にしたいんです。。もはやここまで並べ替える理由もよくわからなくなってきますが、知りたいのです。 手動で選択範囲とフィルターをかけなおせば可能かもしれませんが、効率が悪いんです。 画像の添付の仕方がわかりました。 宜しくお願い致します。

  • Excelについて。【再】

    最初の状態です。D列を昇順→A列を昇順→BとC列だけにフィルターをかけなおし、C列を昇順にするんですが、A列が200の行だけを昇順にして、A列が300の行だけを昇順にする、という感じです。手動で選択範囲とフィルターをかけなおせば可能かもしれませんが、効率が悪いんです。 そもそもこれが正解なのかもわかりません。もっといい方法や手順があるかもしれません。。。 画像の添付の仕方がわからず、もう一度改めて質問させていただきます。宜しくお願い致します。

  • エクセルのデータ抽出について

    基本的な内容かもしれませんが、どうしてもわからないので教えてください。   A B C D 1 1 b 3 c 2 2 t 4 y 3 3 r 3 o 4 4 l 5 p 5 5 k 3 w 上記のようなデータベースがあったとします。このシートと異なるシートのあるセルにたとえば3と入力すると   A B C D 1 1 b 3 c 2 3 r 3 o 3 5 k 3 w のようにC列が3である行が抽出され、なおかつA列の昇順で並ぶということをしたいのですが、vlookup等ではうまくできません。 フィルタを使用せずに実現したいのです。お願いします。

  • エクセル2007VBAで検索するコードを知りたい。

    エクセル2007(Excel2007)のVBAで【検索と置換】と同等の機能をもった検索アプリケーションを作りたいのですが、 そのコード(コマンドボタンを実行したときのコード)を教えていただけないでしょうか。 (おそらくですが、リストボックスのコードも必要だと思います。) 正しくは、【検索と置換】から【置換】機能を無くしたものとイメージしていただきたいです。 ●設置するもの ユーザーフォーム(UserForm1) テキストボックス(TextBox1) コマンドボタン(CommandButton1) リストボックス(ListBox1) ●仕様 ユーザーフォームのテキストボックスに入力してコマンドボタンを押すと、検索対象を見つけ、 リストボックスにその対象一覧を行ごとに表示するものになります。 ●検索するときの条件 (1)大文字と小文字を区別しない (2)半角と全角を区別しない (3)部分一致すれば(一部でも一致すれば)検索対象にする (4)今、開いているワークシート上の「全てのセルが検索対象(列や行を指定しない)」 ※検索されたセルの存在する行ごとに、ユーザーフォームのリストボックスに(1行ずつ)表示したいです。 そして、リストボックスに表示されたデータのうち、どれか1つを選ぶと、その選択対象の行の【D列】にアクティブセルを移動するようにしたいです(画面もアクティブセルが見える位置にスクロールします)。 ●リストボックスに(1行ごとに)表示するもの● ↓↓↓ (左から)I列の値、D列の値、O列の値、Q列の値(→4列の値になります) ※リストボックスにQ列の値が表示された場合のみ(Q列に何かしらのデータがある場合のみ)、 リストボックス上の【その行の(I列の値、D列の値、O列の値、Q列の値の)文字すべてを赤色】にして表示していただきたいです。 分かる方がいましたらよろしくお願いいたします。

  • 【Excel VBA】並べ替え

    Excel2003を使用しています。 あるテキストファイルから必要なデータを抽出し、予めExcelで作成してある表に、抽出したデータをコピーするという作業をマクロで処理しています。 Excelの表は、A列→4桁の番号(数値)、C列→文字列、D列→数値で、A列の番号順(昇順)に表示されています。 抽出されたデータは、2行目以下に表示されるので、まず、A2セルに『0000』、C2セルとD2セルにそれぞれ該当のデータがコピーされ、以下、順番にコピーされます。このA2セル『0000』の行データをコピーされたデータの一番最後にもっていき、下記のように上方向へシフトさせたいのですが、このようなことはコードを追加することで可能でしょうか?    A列  C列  D列 2  0000  あ  100 3  1200  い  200 4  1500  う  300        ↓ 2  1200  い  200 3  1500  う  300 4  0000  あ  100 データ元のテキストファイルは、会社で使用しているシステムの機能を使って、テキストファイルにしたものです。このデータが昇順で表示されているので、こちらを並べ替えてマクロを実行すればいいかと思ったのですが、数値と文字列が混在しているので、Excelの表にコピーした後(数値と文字列の混在がなくなった後)に、上記のように並び替えることができればと思い、質問させていただきました。 よろしくお願いします。

  • VBA 指定値に最も近い値のセルの行番号は?

    A列に数値が昇順で並んでます。指定の値に最も近い値が並んでるセルの行番号を知りたいのです。 WorksheetFunction.vlookupを使うと、値は分っても行番号はわからない筈です。 Cells.Find().Row を使うと、行番号はわかりますが「最も近い」値はわからない筈です。 マクロを組め!との御指摘があるかも知れませんが、便利な関数があるのならそれで済ませたいです。何かありませんか?無ければ諦めます。

  • 前回Excel2007で複数のセルを併せて

    前にも似たような形で質問しましたが、今回は自分で検索したい形で値を入れたタイプなんです。 (1)列HIJの3行目から下に向かって既に入ってあるデータを消して (2)range(A10:C12)に自分が検索したい(ワイルドカードも時には含めた)形で値A~Fのいずれかを各セルに入れてからマクロボタンを押して (3)range(A10:C12)の複数のセルの値を併せて参照して (4)(列OPQの最後尾には新しいデータが常に追加されます)O列+P列+Q列から検索し(その検索された1つ下のセルを黄色く色を着けて)、検索された1つ下の値をコピーして (5)列HIJの3行目から下に向かってそれをペイストして表したいです。 誰か教えて下さい。お願いします。

専門家に質問してみよう