• ベストアンサー

エクセルVBA 文字数指定で置換

Excel VBA で、 (1) Sheet1のA1:A9の各文字列の3文字目から2文字を   Sheet2のB1の文字列(bb)に変換する。 (2) Sheet1のA1:A9の各文字列の5文字目から2文字を   Sheet2のC1の文字列(cc)に変換する。 とするには、どのようにしたら良いでしょうか?

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

  • ベストアンサー
  • merlionXX
  • ベストアンサー率48% (1930/4007)
回答No.2

> Sheet2のB1の文字列(bb)に変換する。 > Sheet2のC1の文字列(cc)に変換する。 この意味がよくわからないのですが、それぞれB1とC1につなげて表示するんでしょうか? Sub test01() Set sh1 = Sheets("Sheet1") Set sh2 = Sheets("Sheet2") On Error Resume Next For r = 1 To 9 St1 = St1 & Mid(sh1.Cells(r, 1), 3, 2) St2 = St2 & Mid(sh1.Cells(r, 1), 5, 2) Next On Error GoTo 0 sh2.Cells(1, "B") = St1 sh2.Cells(1, "C") = St2 End Sub

その他の回答 (1)

  • okormazd
  • ベストアンサー率50% (1224/2412)
回答No.1

(1)下記。(2)も同様。 元の文字列の長さが足りないときのエラー処理も必要か。 Sub Macro2() Set sh1 = ActiveWorkbook.Sheets("Sheet1") Set sh2 = ActiveWorkbook.Sheets("Sheet2") For r = 1 To 9 sh1str = sh1.Cells(r, 1) Mid(sh1str, 3, 2) = sh2.Cells(1, 2) sh1.Cells(r, 1) = sh1str Next End Sub

azure__
質問者

お礼

そのまま貼り付けたら上手くいきました。 ありがとうございました。

関連するQ&A

  • エクセル2003のVBAを教えて

    エクセル2003のVBAを教えてください。 次の対象データで、(1)(2)(3)の作業が出来るエクセルVBAを教えて下さい。 (1)(2)(3)個々のVBAでお願いします。 ●対象データ:種類(A列)、文字(B列)、    データの行数:不特定なので、データのある最終行までとします。 ●教えていただきたい項目  (1):種類だけを(C列)に取り出す。  (2):種類の先頭に空白の行を3行入れて、追加の2行目の種類(A列)に文字(B列)を入れる。  (3):種類が5行以上あるときは、5行ごとに空白行を追加する。 ●対象データ 種類(A列)   文字(B列) AA       あああ BB       いいい BB       いい BB       いいい CC       うう CC       うう DD       ええええ DD       ええええ DD       ええええ DD       ええええ DD       ええええ DD       ええええ DD       ええええ ●(1)のVBAの結果(このようになるVBAを教えてください。) (C列) AA BB CC DD ●(2)、(3)のVBAの結果(このようになるVBAを教えてください。) 種類(A列)    文字(B列) あああ AA        あああ いいい BB        いいい BB        いいい BB        いいい うう CC        うう CC        うう ええええ DD        ええええ DD        ええええ DD        ええええ DD        ええええ DD        ええええ DD        ええええ DD        ええええ

  • エクセルで、規則性はあるのですが、数字と文字が混在しているものを重複しないように抽出したいのですが。

    エクセルで、シート1に列A(数値)と列B(文字列)を結合したものが、 列C(列A&列B)であります。 これをシート2で列Cの文字列が重複しないように抽出したいのです が、どうしたらよいのでしょうか? シート1     列A  列B  列C 行1  項目A 項目B 項目C 行2  2   CC  2CC 行3  3   AA  3AA 行4  5   BB  5BB 行5  7   PP  7PP 行6  2   CC  2CC 行7  5   AA  5AA これをシート2で、     列C 行1  項目A 行2  2CC 行3  3AA 行4  5BB 行5  5AA 行6  7PP このように重複するものを統合した形でまとめたいのですが、 わかるかたがいれば教えてもらえないでしょうか?

  • エクセル2003のVBAを教えてパート2

    エクセル2003のVBAを教えてください。 対象データ(2種類のデータ混じっている)があり、文字1(A列)、文字2(B列)が重複する行を削除するエクセルVBAを教えて下さい。 ●対象データ:文字1(A列)、文字2(B列)、種類 (C列) データの行数:不特定なので、データのある最終行までとします。 ●教えていただきたい項目 文字1(A列)と文字2(B列)がどちらも同じ場合は、1行消して、種類のセルを空白にする。 文字1(A列)が同じ文字2(B列)が違う場合は、2行ともそのまま残し、種類のセルもそのまま残す。 文字2(B列)が同じ文字1(A列)が違う場合は、2行ともそのまま残し、種類のセルもそのまま残す。 ●対象データ 文字1(A列)  文字2(B列)   種類 (C列)          あああ      朝朝朝朝          いいい      朝朝朝朝          いいい      夜夜夜夜          いうえ       夜夜夜夜 BB       おおお      朝朝朝朝 BB       おおお      夜夜夜夜 CC       かかか      朝朝朝朝 CC       ききき      夜夜夜夜 DD       くくく        朝朝朝朝 EE        くくく        夜夜夜夜 ●VBAの結果(このようになるVBAを教えてください。) 文字1(A列) 文字2(B列) 種類 (C列)             あああ     朝朝朝朝             いいい                  いうえ      夜夜夜夜 BB          おおお      CC          かかか     朝朝朝朝 CC          ききき      夜夜夜夜 DD          くくく        朝朝朝朝 EE          くくく        夜夜夜夜 ※              いいい           →「朝朝朝朝」のみ削除             いいい      夜夜夜夜→行削除 BB          おおお            →「朝朝朝朝」のみ削除 BB          おおお      夜夜夜夜→行削除

  • Excel 複雑なセル埋めのVBA

    エクセルで入力済みのデータをテーブル形式にするためにVBAを組んでいますが突き当たりました、お知恵を拝借させてください。現在成形出来ているのは以下の状態です。    A列     B列    C列 1行  AA      2     1 2行 3行  BB      3     2 4行 5行 6行 7行 8行 9行  CC      2     3 10行 11行 12行 13行 14行 これを以下のようにB列を埋めたいと考えています。A列を埋めるVBAは当方で分かります。      A列    B列    C列 1行    AA     1     1 2行    AA     2 3行    BB     1     2 4行    BB     2 5行    BB     3 6行    BB     1 7行    BB     2 8行    BB     3 9行    CC     1     3 10行   CC     2 11行   CC     1 12行   CC     2 13行   CC     1 14行   CC     2 B1に2が入っていてC1に1が入っているときはB1から下へ1,2の連番を1回入れます、B3に3と入っていてC3に2と入っているときはB3から下へ1,2,3の連番を2回繰り返します、同じようにB9以降も処理しています。連番のスタートは必ず1で、現在B列に入っている数字が連番の最後に当たる数値でC列が繰り返し回数という事です。上の例ではB列を書き直していますが、新たにD列にB列に入れたい連番の列を作る方法でもいいと思っています。 もし表が崩れていたら済みませんでした。恐れ入りますがポインタでも結構ですのでご教授下さい、よろしくお願いします。

  • Excelでのデータ抽出

    Excelで外部結合風のデータ抽出を教えてください。 シートAとシートBに表形式のデータがあり、 シートAのA列の値とシートBのA列の値が一致するシートBの 行を抽出するのが目的です。 具体的には次のような感じです。 シートA         シートB ----------------  ---------------- A列 | B列 | C列     A列 | B列 | C列 ----------------  ---------------- 2  | 2B  | 2C      1  | 1BB | 1CC ----------------  ---------------- 4  | 4B  | 4C      2  | 2BB | 2CC ----------------  ---------------- 6  | 6B  | 6C      3  | 3BB | 3CC ----------------  ---------------- ↓ シートB ---------------- A列 | B列 | C列 ---------------- 2  | 2BB | 2CC ---------------- 以下以外の方法がありましたら教えてください。 1)アクセスに両シートのデータを取り込み、2つのテーブルを外部結合で連結させる。 2)マクロで二重ループをつくり、A列が一致した行を取り出す。 よろしくお願いします。

  • EXCEL VBA を教えて下さい。

    EXCEL VBA で 業務毎に(A業務、B業務、C業務)、 担当者のメールアドレスを抽出するツールを 作りたいです。 <Sheet1>    A列   B列   C列   D列   E列    氏名  メアド  A業務  B業務  C業務    111   111@aaa   to   cc   bcc    222   222@bbb   cc   bcc  to    333   333@ccc   bcc  to   cc    444   444@ddd   to   cc   bcc もしも、A業務のセルををクリックしたら、、、 Sheet2に下記のように表示するものを作りたいです。 <Sheet2> to:    111@aaa,444@ddd cc:    222@bbb bcc:   333@ccc なんとか下記まで書いてまましたが、知識が未熟な為、行き詰っています。 Sub Macro03() With Worksheets("Sheet1").Range("A1") .AutoFilter Field:=3, Criteria1:="to"   ( B列の対象メアドをカンマで連ねてコピーしたいのですがわからないです) .CurrentRegion.SpecialCells(xlVisible).Copy Worksheets("Sheet2").Range("B2").PasteSpecial Paste:=xlValues, Transpose:=True .AutoFilter End With Worksheets("Sheet2").Activate End Sub VBAの優秀な方、 どうか教えて下さいますよう、宜しくお願い致します。

  • EXCELのデータベース利用について(VBA)

    VBA初心者の者です。 下記の様なEXCELファイルを作りたいのですが、どのようにすれば良いのか まったくわかりません。 ACCESSでの構築が簡単なのかもしれませんが、データ量がそれほど多くないことと 職場にACCESSがないため、可能であればEXCELで構築したいと考えています。 私自身、プログラムの知識がなく、EXCEL VBAのサイトを確認するのですが、いまいち どうすれば良いのかわかりません。 ぜひご教授の程よろしくお願いします。 3つのシートの構成は以下になります。 【入力シート】 A1セルに文字列(A~Z)入力欄 【○○データシート】 A列に A~Z の文字列 B列に 001~100までの数値 C列に 001~100までの数値 D列に 001~100までの数値 E列に 001~100までの数値 例)    A列   B列   C列   D列   E列 1   A   001 2   B   001    002    003   004 3   C   003 4   D   002    003 【▽コマンドシート】 A列に 001~100までの一意の数字 B列に 文字列(コマンド) C列に 文字列(コマンド詳細) 例)    A列    B列    C列 1   001   xx     blank 2   002   xxx△   xxx 3   003   xxxx    x○ 4   004   xxxxx   xxx 【欲しいVBA】 1、入力シートのA1セルに○○データシートのA列に該当するA~Zの 文字列を入力。 2、○○データシートのB列~F列までの数値を参照 3、2の数値において▽コマンドシートのA列に記載ある番号と紐づけを行い、 ▽コマンドシートのB列、C列に記載がある文字列を入力シートのB列、C列にコピー ※コピー時は▽コマンドシートの書式や体裁情報も含めてコピー。 例としては以下になります。 入力シートの A1セルにDを入力した場合は 入力シート    A列    B列    C列 1   D    xxx△  xxx 2        xxxx    x○ 3 以上、ご教授よろしくお願いします。

  • excel vba 検索の方法について

    excel vba 検索の方法について sheet1とsheet2があり sheet1のA列に10列(全て8桁の数字)文字が並んでいます。 sheet2のA列には1000列(全て8桁の数字)文字が並んでいます。 sheet1のA列とsheet2のA列で同じ文字がある場合 sheet2のA列の同じ文字の隣のsheet2のB列に◎がつくような vbaが書きたいです。 A列の文字は消したり、文字を変えたりします。 コマンドボタンに書いて、ボタンを押せば B列に◎がつくようにしたいです。 ご教授お願いします。

  • エクセルの名前の定義について。

    ご覧いただきありがとうございます。 エクセルの名前の定義についての質問です。 (1)【sheet1】 A2:A6に『aa』、 B2:B10に『bb』、 C2:C6に『cc』という名前を付けたとします。 ちなみにそれぞれのセルには文字列が入力されています。 (名前の定義の《範囲》はブックではなく、sheet1) (2)【sheet2】 B2:D6に『aa』、 B7:D15に『bb』、 B16:D20に『cc』と、sheet1と同じ名前を付けました。 それぞれB列・C列・D列には数字が入力されています。 (名前の定義の《範囲》はブックではなく、sheet2) ちなみにA列には、sheet1に入力されている文字列と同じものが入力されています。 A2:A6にはsheet1で『aa』と名前をつけた範囲と同じ文字列。 A7:A15にはsheet1の『bb』と同じ文字列。 A16:A20には『cc』と同じ文字列です。 ここからが本題です! (3)【sheet3】 A2に何らかしら関数を入れて、【sheet1】で作った名前(aaやbbやcc)が1つ表示されるようにしたとします。 そしてB2には、A2で表示された名前の中の文字列が1つ表示されるようにします。 (例えばA2に『aa』と表示されたら、B2には◯◯) 更にC2には、B2に表示された◯◯という文字列を使って、【sheet2】の名前『aa』の中のB列と、A列にある◯◯とが交差するセルに入力されている数字(図でいう(5))を表示させる関数を入力したいのです。(INDEXやINDIRECT、MATCH関数など…) 他に例えば、A2に『bb』(sheet1の名前)、B2に★★と表示されたら、C2には【sheet2】の名前『bb』の中のB列と、A列にある★★が交差するセルに入力されている数字を表示させたいです。 同じように、今度は、D2には、B2に表示された◯◯という文字列を使って、【sheet2】の名前『aa』のC列と、A列にある◯◯の交差するセルに入力されている数字を表示させたいです。 長々とややこしくてすみません… 説明分かりますでしょうか?? つまりは【sheet3】のC2・D2・E2に入力する関数が知りたいです。 自分なりに関数を入力してみたのですが、A2で表示された名前がsheet1での名前なので、sheet2の情報を引き出す事が出来ません。 わざわざsheet1とsheet2でシートを分けたのは、同じシート内で同じ名前が付けられないと思ったからです! どなたか分かりましたら教えて下さい! どうぞよろしくお願い致します。 ※ちなみに、貼付した図の『・』は以下省略の意味で使ってます。

  • Excel VBAでの置換の方法について

    Excelの各シートのA5:A104の列に文字列で「●着/●頭」というデータが入力されています。●は半角の1~2桁の数字になります。 例えば、 A5「5着/10頭」 A6「3着/12頭」 A7「6着/7頭」 といった文字列です。これを置換を使って「着」と「頭」を消して A5「5/10」 A6「3/12」 A7「6/7」 と表示されるようにしたいのですが、VBAで良いコードがありますでしょうか。シートは16ページあり、シート名は数字の1~16です。

専門家に質問してみよう