VBAでセルの文字列を移動させるプログラム

このQ&Aのポイント
  • VBAを使ってセルの文字列を移動させるプログラムを作成する方法について教えてください。
  • エクセルシートには英単語が入っているセルとその下に和訳が入っているセルがあります。
  • 空欄を目印にして、セルの文字列を移動させるVBAプログラムを作成する方法について教えてください。
回答を見る
  • ベストアンサー

VBAでセルの文字列を移動させるプログラム

お世話になります。どうかお力をお貸ししていただけると幸いです。 添付の図のようにセルAに英単語が入っており、続けて英単語のセルの下に和訳が入っているエクセルシートがございます このシートにおける和訳部分を、英単語が存在するセルの右のセルに自動で移動させるマクロを作成したいのですが実力不足で思いつきません。 単語と和訳のまとまりの間には1~3行ほどの空欄がございます(空欄の数に規則性はございません)。よってこの空欄を目印にして、 A列を上から下へと見ていき、最初に空欄以外のセルを発見し場合は、そのままにする。そして空欄以外のセルにあたった次に下のセルを参照し空欄にあたるまではA列に存在する文字を移動させるというようなプログラムを組めばできそうということはわかるのですが・・・ どうか、どのようにプログラムを書けばよろしいか教えていただけませんでしょうか。 よろしくお願いいたします。

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

  • ベストアンサー
  • tom04
  • ベストアンサー率49% (2537/5117)
回答No.2

No.1です。 >英単語のしたに英語で当該単語の解説がある場合は・・・ となると結局「空白セル」で判断するしかないようですね。 Sub Sample2() Dim i As Long, k As Long For i = 1 To Cells(Rows.Count, "A").End(xlUp).Row If Cells(i, "A") <> "" Then k = i + 1 Do While Cells(k, "A") <> "" Cells(k, "A").Cut Cells(i, Columns.Count).End(xlToLeft).Offset(, 1) k = k + 1 Loop i = k End If Next i End Sub 今度はどうでしょうか?m(_ _)m

844844
質問者

お礼

tomo04さん お世話になっております。 完璧に動作いたしました。 この度はご丁寧に教えていただきありがとうございました。 本当に助かりました!

その他の回答 (1)

  • tom04
  • ベストアンサー率49% (2537/5117)
回答No.1

こんばんは! >よってこの空欄を目印にして・・・ 空白を「目印」ではなく、バイト数で判断してみました。 「英単語」→すべて半角文字のはずなので文字数とバイト数が同じ数になる 「和訳」→全角1文字は2バイトとなるので文字数とバイト数は異なる を利用した方法の一例です。 Sub Sample1() Dim i As Long, k As Long For i = 1 To Cells(Rows.Count, "A").End(xlUp).Row '▼文字数とバイト数が同じ場合は、単語を判断 If Len(Cells(i, "A")) = LenB(StrConv(Cells(i, "A"), vbFromUnicode)) Then k = i + 1 '▼文字数とバイト数が異なるセルをi行の右隣りのセルはカット&コピー Do While Len(Cells(k, "A")) <> LenB(StrConv(Cells(k, "A"), vbFromUnicode)) Cells(k, "A").Cut Cells(i, Columns.Count).End(xlToLeft).Offset(, 1) k = k + 1 Loop i = k End If Next i ActiveSheet.Columns.AutoFit End Sub こんな感じではどうでしょうか?m(_ _)m

844844
質問者

お礼

お世話になっております。 早速のご回答を下さりありがとうございます! 非常に助かりました。 さらに教えていただけるととてもありがたいのですが、今回のケースのような場合で、英英辞典のように、英単語のしたに英語で当該単語の解説がある場合はどのようにすればよいかもご教授願えませんでしょうか。 質問に挙げた例は英和辞典のようなケースのデータであったのですが、実は英英辞典のようなケースのデータも処理がしたく、もしも処理をすることができればさらにありがたい限りです。 もしもご存知でしたらどうかよろしくお願いいたします。

関連するQ&A

  • 文字列を検索しその列をコピーする(VBA)

    よろしくお願いします。 OS:WINDOWS 2000 PRO 環境:OFFICE 2003 エクセルのVBAについての質問です。 A列には数値コードが入っています。 そのコードは"1"と"2"に分類されてます。 マスターはSHEET1で、このマスターから コード1はSHEET2に、 コード2はSHEET3に 振り分けたいのですが、どうもうまくいきません・・・ A列にはコード"1" "2"以外に空白セルが存在します。 空白セルは無視したい。。。 それとこのデータはDBから抽出するのですが、 抽出したデータは規則性はありません。 抽出するごとに"1"と"2"と"空白"はランダムなので、 LOOP等のマクロを調べてやってみたのですが、出来なくて週末になってしまいました。 A列からコード1とコード2を検索して、 ヒットしたコードの行ごと各SHEETにコピーして、 なおかつ各シートA列の入力されていない一番下の セルにコピーしたいのですが、検索でヒットした 上から順番に。。。 これをLOOPと組合わせれば、各シートにコピーするのは 問題ないような気がします。。。 Sub AAA_BBB() .Copy Worksheets("Sheet2").Range("A65536").End(xlUp).Offset(1, 0) End With End Sub LOOP等で上記の条件を満たせる方法はないでしょうか。 ご教示を、よろしくお願いします。

  • 範囲内である文字列が含まれていたら,違うセルに表示させる

    A4:A10という範囲(同じ行)の中に,ある文字列が含まれていたら,違うセルに○と表示する,それ以外は空欄という式をつくるにはどうしたら良いでしょうか。 文字列は同じ行の中で同じ文字が1回以上登場することはありません。 A B C あ い う か き く・・・ D E F い え お き く こ・・・ G H I う お い こ け き・・・ 1行目の文字列(あいうかきく)の行の中に「あ」が含まれていたらAセルにアと表示し, 3行目文字列(うおいこけき)に「う」があったらIにウと表示する。それ以外は空欄。 アルファベットのセルには色をつけたりといった書式条件ではなく特定の文字列を表示させたいです。 「IF(B42="あ","ア",""」の場合,B42のセルの中身が「あ」だったらアと表示する,それ以外は空欄。という意味になりますでしょうか? これで,B42セルだけではなくB42:B50という範囲の中に「あ」という文字列があったら…と思いましてご相談です。宜しくお願いします。

  • EXCELでセルの移動マクロを作りたいのですが…

    EXCELについての質問です。マクロを使ってセルの移動をさせたいと考えています。 まず使うデータ範囲はA1:E11です。A1:E10にはデータが入っています。 ちなみに、A列には名前、B~E列には数字が入っており、A11:E11は合計が表示される設定しており、合計の場所はここに固定させたいのです。 その移動のさせ方ですが、 A1:E1に空欄があるとします。 そのときに、マクロを再生させるとA2:E10のセルに入っているデータ(値のみ)を上に移動させたいのです。 さらに、A3:E3の内容を消して空欄が出来たとします。 その時に同じ操作によってA4:E10のデータを上に移動させたいのです。 前者のマクロを単純に作ると縦に9つ分のセルを移動させるマクロでは、 A11:E11も上に移動させられてしまいます。なので、移動させるセルの一番下が10行目になるようなマクロを作りたいのです。 何がしたいのかといいますと、いらないデータを消した時に空欄をマクロで詰めてしまいたいのです。 乱文で判りづらいかと思いますが、知識のある方教えていただけないでしょうか。 よろしくお願い致します。

  • VBAで列の検索抽出について

    EXCEL2003のマクロについて質問です。InStr構文でうまくできませんでした。 SHEET1のA列(A1~A9000)に文章データが9000あり、SHEET2A列(A1~A500)に単語が500ある時、SHEET2のA列にある500の単語の中で1つでもSHEET1のA列の文章の中に含まれているセルがある場合を別シート(SHEET3)に抽出したい場合はどのようなマクロを組めばいいのでしょうか? 宜しくおねがいします。

  • 文字列を指定して2行へ移動

    シート1のA列に下記のデータが入力されています。 11-1111あああああ 22-2222いいいいいい 33-3333ううううう 44-4444えええええええ     ↓ シート2のA1セルに「11-1111」A2「あああああ」 B1に「22-2222」B2に「いいいいいい」 C1に「33-3333」C2に「ううううう」 と3列に繰り返し文字列を移動することは可能でしょうか? 「11-1111」と「あああああ」のフォント数も違います。 シート1のA列には実際、かなりのデータの量があります。 VBAはまったくわからないのでできたら関数で解決できたらと思います。 わかりにくい説明ですみませんが宜しくお願いします。

  • VBAで列から数字を判別するには?

    現在プログラムを作成しています。内容はシート1の各列に内容をいれて実行ボタンを押すとシート2のある行にコピーされるというものです。そのシート2にコピーされる場所というのが、A列に数字がランダムにふってありまして、 シート1のA1セルにたとえば『12』と打って、実行ボタンをおしたら、シート2のA列の中から『12』となっているセルを判別してその行に各項目をコピーしたいのです。 なので 今ほどいったようにシート1に『数字』をうって、シート2のA列中から判別するプログラムはどのようにすればいいのでしょうか? 本当に困っています。 おしえてください。おねがいします。

  • Excel VBA セル内の文字列操作について

    例えば、A列(A2より下のセル)のセル内にある文字列が、それぞれ対応するB列(B2より下のセル)のセル内にあった場合、該当文字列のフォントの色を変えたい(例えば「赤」)のですが、VBAで一括処理とかできるのでしょうか? <例> A列      B列 テスト     このテストは・・・ → 「テスト」の部分のみ赤色にしたい。 サンプル   サンプル     → 文字列全部分の「サンプル」を赤色にしたい。 どうかご教示の程よろしくお願いいたします。

  • VBA 可視セルのみをoffsetで移動

    VBA 可視セルのみをoffsetで移動したいです。 AutoFilterで表示した"A列の"可視セルのみを、1セルずつoffsetで下方向に移動したいです。  AB 1○○ 2○✕ 3✕○ 4○✕ 5 ・ ・ ・ これにフィルタをかけ、 ○ のみを表示すると  ▼  AB 1○○ 2○✕ 4○✕ 5 ・ ・ ・ になりますが、 range("A1").offset(1,0).select で1セルずつ順に下へ降りていくと 非表示のA3も選択されてしまいます。 どうすればよいでしょうか?

  • セル移動の設定

    エクセルマクロがわからない初心者です。 エクセルシート「sheet1」のセルA2で(データ入力、または入力せずに)「Enter」を押した後、A5に移動させたいのですが、カーソルでA1からA2を通りA6にカーソルを移動させてもセルが飛ばない(A6からA1に下から移動させても同様に飛ばない)ようにしたいのですが、何かよい方法はありませんか教えてください。

  • vbaにて並べ替えしたい。

    並べ替えするには? ただいまVBA学習中です。 sheet1に次のような文字列がセルに入力されているとします。 3列で30行あります。   A列 B列 C列 1行 あ  い  う 2行 え  お  か ...以下30行まで続く。 これらを sheet2に A列 あ い う え お か のようにひとつの列へ縦にするにはどのような記述になりますか? 私なりの考え方ですが セルのスタート位置はシート1のA1とします。  シート1にて  ・あ い う と順番に配列に格納  ・セルを左に2つ下に1つ移動   この動作を30回繰り返す(for next 使えばでいいですよね?)  シート2に移動してA1から下方向へ  格納された文字列を入力する。  と、考えてみたものの記述の仕方がわかりません。 力貸してください。