- ベストアンサー
エクセルのVBAについて
エクセルの列を上から一つづつ読み込み、Fという文字を発見したら、その下のセルを切り取って、他の列のヒトマス上のセルに貼り付ける。という作業をするプログラムを書き実行したいのですが、どのようにしたらいいでしょうか? できるだけ具体的に書いていただけるとありがたいです。このサイトを閲覧している方にくらべたらほぼ初心者ですので、VBAを起動する場面からかいていただけると幸いです。 よろしくおねがいします。
- みんなの回答 (5)
- 専門家の回答
質問者が選んだベストアンサー
おはようございます。 昨夜は寝ぼけ眼で書いたのでどうやらミスってたようです。 修正しました。 Sub TEST04() X = Cells(ActiveSheet.Rows.Count, 1).End(xlUp).Row 'A列最終行取得 For n = 2 To X '2行目から最終行まで If Cells(n, 1).Value <> Replace(Cells(n, 1).Value, "F", "") _ Or Cells(n, 1).Value <> Replace(Cells(n, 1).Value, "f", "") Then FR = n 'もしFかfが存在すればその行をFRに代入 If Cells(n, 1).Value <> Replace(Cells(n, 1).Value, "G", "") _ Or Cells(n, 1).Value <> Replace(Cells(n, 1).Value, "g", "") Then GR = n 'もしGかgが存在すればその行をGRに代入 If FR <> 0 And GR - FR > 1 Then Range("IV" & FR + 1 & ":IV" & GR - 1).Value = "Delete_Row" '削除対象行の最右列に記入 FR = 0 'FRをリセット End If Next n '繰り返し For i = X To 2 Step -1 '最終行から2行目まで下から上へ If Range("IV" & i).Value = "Delete_Row" Then Rows(i).Delete '削除対象行を下から順に削除 Next i End Sub もっとほかにも良い方法がありそうですが、これでも一応は動くと思います。
その他の回答 (4)
- shishishishi
- ベストアンサー率39% (362/921)
Sub TEST03() X = Cells(ActiveSheet.Rows.Count, 1).End(xlUp).Row 'A列最終行取得 For n = 2 To X '2行目から最終行まで If Cells(n, 1).Value <> Replace(Cells(n, 1).Value, "F", "") _ Or Cells(n, 1).Value <> Replace(Cells(n, 1).Value, "f", "") Then FR = n 'もしFかfが存在すればその行をFR If Cells(n, 1).Value <> Replace(Cells(n, 1).Value, "G", "") _ Or Cells(n, 1).Value <> Replace(Cells(n, 1).Value, "g", "") Then GR = n 'もしGかgが存在すればその行をGR If FR <> 0 And GR - FR > 1 Then Rows(FR + 1 & ":" & GR - 1).Delete Shift:=xlUp FR = 0 End If Next '繰り返し End Sub
- shishishishi
- ベストアンサー率39% (362/921)
No2です。 失礼、さっきのでは大文字のFしか探さないようです。 変えてみました。 Sub TEST02() X = Cells(ActiveSheet.Rows.Count, 1).End(xlUp).Row 'A列最終行取得 For n = 2 To X '2行目から最終行まで If Cells(n, 1).Value <> Replace(Cells(n, 1).Value, "F", "") _ Or Cells(n, 1).Value <> Replace(Cells(n, 1).Value, "f", "") Then 'もしFかfが存在すれば Cells(n + 1, 1).Cut 'その1行下を切り取り Cells(n - 1, 2).Select '2列目の1行上を選択 ActiveSheet.Paste '貼り付け End If Next '繰り返し End Sub
補足
お~!!できましたありがとうございます! あともう一つできたら教えていただきたいのですが、列を上から順に調べていって、順にFとGを見つけた時にFとGの間の行を削除するというプログラムはできないでしょうか?(削除する行にFとGは含まれません) よろしくおねがいします。
- shishishishi
- ベストアンサー率39% (362/921)
A列2行目から下にデータがある場合、各セル内にFが存在すれば、その一つ下のセルを切り取り、B列の一つ上に貼り付けるVBAです。 使い方は 1.VisualBasicEditorをAlt+F11で起動します。 2.メニューの「挿入」→「標準モジュール」 3.標準モジュールに以下のVBAコードをコピーペーストします。 4.ワークシートからメニューの「ツール」→「マクロ」→「マクロ」で、出てきた「TEST01」を選択肢して、実行します。 簡単でしょ、がんばってください。 Sub TEST01() X = Cells(ActiveSheet.Rows.Count, 1).End(xlUp).Row 'A列最終行取得 For n = 2 To X '2行目から最終行まで If Cells(n, 1).Value <> Replace(Cells(n, 1).Value, "F", "") Then 'もしfが存在すれば Cells(n + 1, 1).Cut 'その1行下を切り取り Cells(n - 1, 2).Select '2列目の1行上を選択 ActiveSheet.Paste '貼り付け End If Next '繰り返し End Sub
- peugeot307
- ベストアンサー率22% (29/130)
読み込むセルに入ってるのは1文字ですか? それとも文字列ですか? (文字列中に1文字でもFがあれば、該当するってことですか?) 「新しいマクロの記録」で、Fを検索する部分と、カット&ペーストの部分を記録して、VisualBasicEditorで足し合わせれば簡単かと。(たぶんね^^;) > VBAを起動する場面からかいていただけると幸いです。 VisualBasicEditorはAlt+F11で起動します。 が・・・Editorの起動方法もご存知ないようだと、編集するのも難しいのでしょうか・・・? まずは、何か本か、入門者用のサイト(例えば、参考URLのような)などで勉強して下さい。
補足
さっそくありがとうございます。 >読み込むセルに入ってるのは1文字ですか? それとも文字列ですか? 文字列です。たとえばfeifd等です。 >が・・・Editorの起動方法もご存知ないようだと、編集するのも難しいのでしょうか・・・? すみません。そこまでは初心者ではありません。少し大げさに書いてしまいました。 参考プログラムやこんな関数が有効など書いていただければ幸いです。
お礼
ありがとうございます。緊急を要している為、質問をしてしまいました。だんだんと解決してきました、ほんとにありがとうございます。