• ベストアンサー

エクセルで、文字列から文字を取り出す自動マクロを教えてください。

KenKen_SPの回答

  • ベストアンサー
  • KenKen_SP
  • ベストアンサー率62% (785/1258)
回答No.7

#6 です。 あまりスマートな方法ではありませんが。 #6 で補足いただけなかったのですが、住所はC列かD列か、、というのは1シート内 では統一されているものとします。それを Find で探しています。 Option Explicit Sub Sample()   Dim lngROWNUM As Long   Dim lngCOLNUM As Long   Dim ADDRESS_C As Range   Dim i     As Long   Dim strDATA  As String   Dim lngANSWER As Long      '住所の列を探します   Set ADDRESS_C = Cells.Find( _     What:="〒???-????*", _     LookIn:=xlValues, _     LookAt:=xlWhole, _     MatchCase:=False, _     MatchByte:=False)   If ADDRESS_C Is Nothing Then     MsgBox "データがありません", vbCritical     Exit Sub   End If   lngCOLNUM = ADDRESS_C.Column   Set ADDRESS_C = Nothing      '最終行番号取得   lngROWNUM = Cells(65536, lngCOLNUM).End(xlUp).Row   If lngROWNUM = 1 Then     MsgBox "データがありません", vbCritical     Exit Sub   End If   '画面描写停止   Application.ScreenUpdating = False   '郵便番号と住所の2列を挿入   Columns(lngCOLNUM + 1).Insert   Columns(lngCOLNUM + 1).Insert      '2行目から最終行までループ処理   For i = 2 To lngROWNUM     strDATA = Cells(i, lngCOLNUM).Text     If StrConv(strDATA, vbNarrow) Like "〒###-####*" Then       '郵便番号切り出し(〒マークはカット=2文字目から8文字)       Cells(i, lngCOLNUM + 1).Value = _       StrConv(Mid$(strDATA, 2, 8), vbNarrow)       '住所切り出し(10文字目以降)       Cells(i, lngCOLNUM + 2).Value = _       Mid$(strDATA, 10)     End If   Next i   '列幅調整・見出し   Columns(lngCOLNUM + 1).AutoFit   Columns(lngCOLNUM + 2).AutoFit   Cells(1, lngCOLNUM + 1).Value = "郵便番号"   Cells(1, lngCOLNUM + 2).Value = "住所"      '画面描写停止解除   Application.ScreenUpdating = True   '削除確認   Columns(lngCOLNUM).Select   lngANSWER = MsgBox( _     Prompt:="郵便番号と住所を分離しました。" & vbCrLf & vbCrLf & _         "分離前データを削除しますか?", _     Buttons:=vbQuestion Or vbYesNo Or vbDefaultButton2, _     Title:="削除確認")   If lngANSWER = vbYes Then     '元データの削除     Selection.Delete   End If End Sub

acacdcdc
質問者

お礼

ありがとうございました。 私の質問形式がつたない状態で、いろいろとありがとうございました。 想像通りのマクロです。 助かりました。 ほんとに感謝しています。

関連するQ&A

  • エクセルでのマクロについての質問です

    毎日行数の違うデータの隣に数式を入力してフィルでコピーしていますが簡易のマクロを組んでみました。ですが行数が変わるためマクロ登録した時の行数までしか数式がコピーされません。 画面1のようにC1、D1セルの数式をフィルでコピーしたマクロを登録しました。画面2のようにデータが多くなるとC5、D5までしかコピーされません。最初はC1、D1だけに数式を入力してマクロ実行後、フィルでコピーしていましたが面倒な為、現在は行数を多く設定していますが無駄に数式が入るためにデーターが重くなります。マクロでB列の最下セルを検索しその列までC,Dセルをコピーというなマクロが出来るなら教えて頂きたいです。VBAの知識を必要とすると思いますがよろしくお願いします。

  • エクセルの文字列操作

    住所録の様式で A列にNo、B列に氏名、C列に住所のファイルがあり、 C列の住所で、1個のセルに何故かしら「住所と電話番号」が入っています。 住所と電話番号を夫々別の列に分割したくて、 電話番号は、RIGHT 関数で取り出しました。 住所は、文字数が一定でないので、LEFTまたはMID関数では出来ません。 ここで質問です 住所データの末尾に混在する電話番号は10文字の場合に限定し、 文字数の異なる、住所(○○市XX町△△番地○△荘2-103など)のみ 抽出する方法はありませんか。 なお、VBAなどは無知です、エクセル関数だけの操作があれば教えてください。

  • Excel 2007 文字列について

    Excel 2007 文字列について 郵便番号に「-」を入れたいです。 1つのセルに例えば「0001111」とある場合に 「000-1111」と変換したいです。 どのような関数またはマクロを作成すればよろしいでしょうか。

  • エクセル Rank関数をマクロで

    こんにちは いつもお世話になっています。 Rank関数を作ることが多いのでマクロを作ることにしました。 例えば、C3からc23まで数字が入っています。c3-c23を選択した状態でマクロを動かしたいです。 実際は、特定列の一列の選択されたセルを対象にしたいです。 D列には別のデータが入っているのでC列とD列の間に新規に列を挿入し、新規のD3-D23にRankをいれます。つまり、選択セルの右側に新規の列を挿入したいです。 引数の数値はD3にはC3、D4にはC4…D23にはC23。参照は選択セルのC3からC23。順序は降順です。 一応、マクロ記録してみましたが Sub Macro1() ' ' Macro1 Macro ' Columns("D:D").Select Selection.Insert Shift:=xlToRight Range("D3").Select ActiveCell.FormulaR1C1 = "=RANK(RC3,R3C3:R23C3)" Selection.AutoFill Destination:=Range("D3:D23"), Type:=xlFillDefault Range("D3:D23").Select End Sub よろしくお願いします。

  • エクセル マクロ 文字列からの行数の取得

    エクセルでマクロ初心者です。よろしくお願いします。例えば1列目にデータ名が入力されていてその個数が可変である場合(小計は末尾ではありません)小計行の1列目から数式をいれたいのですが、行数が固定でないため小計と書かれたセルの行数を取得したいのですが、わかりません。いい方法をお願いします。    A B C D データ aa bb cc 小計 ・ ・

  • <文字列マクロについて>

    <文字列マクロについて> 皆さま お力を貸して下さい。 初心者で、何もわからず書いておりますがすみません。 下記の2つのマクロを教えて下さい。 ?横に並んだ「ある行」に在るデータを「列」に変換し、  指定した数だけ並べる    あいうえお    ←A1セルからE1まで5列(これは状況により変わる)       ↓(マクロ実行:3行同じ数だけ並べるという指定)  あ        →A1セルから下にひたすら、同じ文字が続き順に並ぶ  あ  あ  い  い  い  う  う        →A1セルから下に並べる(3行は指定できれば別の数字にも変えたい  う  え  え  え  お  お  お ?規則的に並んだデータのまとまりをセットで移動する。  例だと5つの塊(これは変数とおきたい)    あ A              a  い B              b  う C               c   え D               d  お E              e    ↓(マクロ実行)  あ  い  う  え  お  A  B  C  D  E      ・  ・  ・  ・    a b c d e    

  • エクセルで挿入した列に関数が値を返しません。

     エクセルで列を挿入したセルに、関数を入力しても値を返しません。 関数を入力しても、数式バーに表示される数式がセルに表示されるだけで、答えは出ません。式はあっていて、違うセルに数式をコピーして張り付けると、値を返します。  また、挿入した列に元からある空白の列をコピーして貼り付け、関数を入力しても値を返します。  どこかで変な設定をしてしまったのでしょうか?  分かる方、どうか教えてください。

  • エクセルで数字とアルファベットと文字列を分割する方法

    こんばんは。 エクセルのセルで数字とアルファベットの文字列を分割する方法を教えて下さい。 100AB3.4C → "100" "AB" "3.4" "C" 間にスペースやカンマなど無く、文字数は異なります。 数字は小数点がある場合と無い場合があります。(上記の "100" "3.4" のように) 同じ列に同様のデータが数件~数千件あり、まとめて分割したいです。 関数もしくはマクロ(VBA)で可能であれば教えて下さい。 最近マクロの勉強を初めたのですが、方法が思いつきません。。。 宜しくお願いします。

  • エクセル セルにデータを打ち込んだ時点でマクロを起動できるか?

    いつもお世話になります。 数千行ある表の列A,Bに数値を打ち込むセルを用意しており、打ち込まれた瞬間に、列Cに関数を使って答えを出したいのですが、列Cに予め関数を入力しておくと、計算が非常に遅く、また容量も重くなってしまいます。 そこで、 「列A,B両方にデータが打ち込まれた瞬間にマクロで列Cに数式を入力し、答えを出してから値で貼り付ける」 ということが出来ないかと思うのですが、可能でしょうか。 以上宜しくお願い致します。

  • Excel2007のマクロで文字列を結合

    Excel2007のマクロで文字列を結合したいのですがうまくいきません。 1、セルA1からU1までデータが1つずつ入ってます。 2、1のデータを3列ずつ結合してA3からG3にコピー。 例えば、セルA1あ、B1い、C1う、D1え、E1お、F1か、ならセルA3あいう、セルB3えおか、のようにマクロで一機にできるソースをお願いします。