• ベストアンサー

エクセルのVBAについて

エクセルの列を上から一つづつ読み込み、Fという文字を発見したら、その下のセルを切り取って、他の列のヒトマス上のセルに貼り付ける。という作業をするプログラムを書き実行したいのですが、どのようにしたらいいでしょうか? できるだけ具体的に書いていただけるとありがたいです。このサイトを閲覧している方にくらべたらほぼ初心者ですので、VBAを起動する場面からかいていただけると幸いです。 よろしくおねがいします。

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

  • ベストアンサー
回答No.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 もっとほかにも良い方法がありそうですが、これでも一応は動くと思います。

tttt12345jp
質問者

お礼

ありがとうございます。緊急を要している為、質問をしてしまいました。だんだんと解決してきました、ほんとにありがとうございます。

その他の回答 (4)

回答No.4

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

回答No.3

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

tttt12345jp
質問者

補足

お~!!できましたありがとうございます! あともう一つできたら教えていただきたいのですが、列を上から順に調べていって、順にFとGを見つけた時にFとGの間の行を削除するというプログラムはできないでしょうか?(削除する行にFとGは含まれません) よろしくおねがいします。

回答No.2

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

回答No.1

読み込むセルに入ってるのは1文字ですか? それとも文字列ですか? (文字列中に1文字でもFがあれば、該当するってことですか?) 「新しいマクロの記録」で、Fを検索する部分と、カット&ペーストの部分を記録して、VisualBasicEditorで足し合わせれば簡単かと。(たぶんね^^;) > VBAを起動する場面からかいていただけると幸いです。 VisualBasicEditorはAlt+F11で起動します。 が・・・Editorの起動方法もご存知ないようだと、編集するのも難しいのでしょうか・・・? まずは、何か本か、入門者用のサイト(例えば、参考URLのような)などで勉強して下さい。

参考URL:
http://www.moug.net/skillup/index.htm
tttt12345jp
質問者

補足

さっそくありがとうございます。 >読み込むセルに入ってるのは1文字ですか? それとも文字列ですか? 文字列です。たとえばfeifd等です。 >が・・・Editorの起動方法もご存知ないようだと、編集するのも難しいのでしょうか・・・? すみません。そこまでは初心者ではありません。少し大げさに書いてしまいました。 参考プログラムやこんな関数が有効など書いていただければ幸いです。

関連するQ&A

  • エクセル VBA

    エクセルVBAで以下のようなデータがあります。 D列の文字列と右隣のE列の文字列の2つが入っているものをA列から探し、見つかったセルの上にセルを追加し、E列の右隣のF列に入っている文字列を代入したいです。 どのようなプログラムになりますか?

  • エクセルvba初心者です・・・

    エクセルvba初心者です・・・ シート1にあるひとつのセルをコマンドボタンを押した時にそのセル内の文字列をシート2にかいていくようなプログラムをつくりたいです。 例えば シート1のセルに文字入力→”田中”→登録ボタンおす→シート2のセルA1にはいる シート1のセルに文字入力→”竹山”→登録ボタンおす→シート2のセルA2にはいる                  ・                  ・                  ・ というようになるコードわかる方いたら教えてください。おねがいします。

  • エクセルVBA

    初心者でレベルが低いですがよろしくお願いします。 VBAでエクセルのセル内の文字列を読み込んでその中の文字を検索し、ヒットしたときにそのヒットした文字だけを変換して取得することが可能でしょうか?? 列 A1に hanamiti/1234 という文字列が入っていて この文字列の中の / を検索し、あった時に _ に変更する。 結果 hanamiti_1234 として取得した。 ということができるのでしょうか? ご教授お願いいたします・。

  • エクセルでVBAのマクロを組みたい

    VBA初心者です。エクセルで大量の情報があるとき、A列の文字列が”****”であって、さらにB列の文字列が”++++”であるときの、C列の値を検索したい。それを1行目から最下行まで行いたい場合、どのようなプログラムになりますか、教えてください。よろしくお願いします。

  • エクセル VBAで入力

     エクセル初心者です。 条件付き書式で一つのセルに特定の文字列を入力した際に、そのセルと任意の法則性のある複数のセルに(入力内容は無関係でセルの行・列に法則性があります)特定の塗りつぶしを行いたいのですが、どのようにすればよいのでしょうか。 条件付き書式をすべて設定する(手打ち)するのが最も確実で間違いの内方法ではありますが、新規に行・列を挿入した場合、その行・列には条件付き書式が設定されていませんので、意図した作用を起こさなくなってしまいます。 上記ではよくわからないと思いますので、具体的な例を入れさせていただきます。 例)) 任意のセル(A13)に特定の文字列(OK)と入力する。 特定文字列に反応して、そのセルの列に(A12からE12、F12からH12)赤色の塗りつぶしを入れる。 上記は1セルに対して行われますが、VBAを使用してA12からA5000までを検索対象として持たせて、それぞれのセルの列に対して塗りつぶしを入れられるようにしたいと思っています。

  • エクセルVBAでセル選択

    エクセル2000でリストを作成し、VBAで編集しようとしています。 A列に入力されているコードの先頭に「’」をつけて文字列とするための関数をB2のセルからA列のデータが入力されている最後のセルの隣までコピーしたいと思っています。 A列の最終セルを取得するVBAは分かったのですが、その値をB列の選択範囲として使用する方法がわかりません。 エクセルVBAは全くの初心者です。 どなたか教えてください!

  • エクセル内でのVBAの質問です。

    閲覧ありがとうございます。 エクセルの作業ファイルにてVBAのコードを作成しているのですが、中々思う通りに実行できないので、ご教授願います。 実行したい内容については以下の通りです。 ボタン1を押すと(添付画像上段のブック)、マイドキュメント内にある「データ転送ソフト2」という名前のブックを開き、そのブックのシート「A」内(添付画像下段)の、ボタン1を押したシートのF1セル(添付画像上段のブック)と同じ文字(日付)の列と"う"と入力された行の交差したセルの数値(添付画像下段の紫色のセル)をコピーして、ボタン1を押したシートのT4のセル(転送値1:の右隣にある薄緑のセル)に貼り付ける作業が行えるコードをご教授願いたいです。 要約しますと、作業しているシートのボタン1を押すと、別の場所にあるブックを開き、そのシート内の条件に沿った数値をコピーして、作業しているシートの指定されたセルに貼り付ける作業が行いたいです。 とても分かりにくい文章で申し訳ございませんが、お願いします。 可能ならば、コードの解説もつけてくださると嬉しいです。

  • エクセル2003 VBAなのですが

    エクセル2003 VBAなのですが   A   B    C    D    E    F 1 あ   い   う   お   う   123 2 お   さ   え   あ   お   お 3 あ   い   え   お   え   888 上記のような表があるときに 3個以上同じ文字がある場合にセルに色をつけていきたい状況です 上記表でいうと『あ』と『え』と『お』のセルに色をつけたいのです セルには文字列のほかに数字も入っている状況です 単純にCtrl+Fで検索をして『すべて検索』で 出てきたセル全部に色をつける。 それをA1から文字があるところ全部やる と言った事をマクロでやりたいと思っております。 皆様よろしくお願いいたします。

  • VBAのプログラムについて

     VBAでプログラムを書いて以下のようなことを実行したいと考えていますが方法がよくわかりません。   ***1002とセルに入力されているセル列に対して、先頭の文字がaaaであったときに、その後ろの1002を計算して数値に変換するという作業です。  仮に、B列でaaa1002とあった場合に、セルの値がaaaであったときのみ、後ろの1002を100×10^2=10000と計算してB列に対応させてC列に出力したいと考えています。        B列     C列 1行目    aaa1002  10000  2行目 aac1001  空白 3行目 aaa4701  4700  :       :      : 具体的なプログラムのコード、もしくはこのような関数を使えばいいなどヒント等でも構いませんので 教えてください。よろしくお願いします。

  • エクセル VBAについて

    はじめて質問するのですが(閲覧もほとんどしていませんでした)、 ネチケット違反等がありましたら申し訳ありません。 エクセルVBAで下記のようなことをしたいのですが、 できずに困っています。 A列で文字が入っているセルを、上から下まで確認し、 『在庫』という文字が入ってるセルの下2行に空白行を入れたく 思っています。 とりあえず自分で作ってみたのは、 ******************** Sub 行挿入() Dim i As Integer Dim a As String For i = 1 To 1000 Cells(1, i).Value = a If a = "在庫" Then Rows(i + 1).Insert Rows(i + 2).Insert Else End If Next i End Sub ************************************ 初心者で申し訳ないのですが、上記を実行すると、 アプリケーション定義&オブジェクト定義というエラーが出ます。 何がいけないのでしょうか? 恐れ入りますが、教えてください。 よろしくお願い致します。

専門家に質問してみよう