• ベストアンサー

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

KenKen_SPの回答

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

こんにちは。KenKen_SP です。 >元のデータから〒番号を消去... と考えるとちょっと難しくなるので、 「元データの先頭から9文字、およびそれ以降を別々の場所に書き出して、 最後に元データを削除する」 とした方が処理としては楽だと思います。 また、郵便番号部が半角とか全角で統一されているなら、マクロを使わず とも [データ]-[区切り位置]-[固定長...] で分解することもできますね。 Sub Sample()   Dim lngROWNUM As Long   Dim i     As Long   Dim Sh    As Worksheet   Dim lngANSWER As Long        '対象シート定義 ※要書き換え   Set Sh = ThisWorkbook.Sheets("Sheet1")   With Sh     '最終行番号取得     lngROWNUM = .Cells(2, "C").End(xlDown).Row     '画面描写の停止     'Application.ScreenUpdating = False     '確認のため2列を元データの後ろへ挿入     .Columns("D:E").Insert   End With      '最終行までループ   For i = 2 To lngROWNUM     With Sh.Cells(i, "C")       '先頭に〒番号があるか?       If StrConv(.Value, vbNarrow) Like "〒###-####*" Then         'C列の1つ横D列に9文字抜き出したものを記入         .Offset(0, 1).Value = Left$(.Value, 9)         'C列の2つ横E列に残りを記入         .Offset(0, 2).Value = Mid$(.Value, 10)       End If     End With   Next i      'D:E列の列幅調整   Sh.Columns("D:E").AutoFit        '画面描写の停止解除   Application.ScreenUpdating = True   '削除確認   lngANSWER = MsgBox( _     Prompt:="郵便番号と住所を分離しました。" & vbCrLf & vbCrLf & _         "C列の分離前データを削除しますか?", _     Buttons:=vbQuestion Or vbYesNo Or vbDefaultButton2, _     Title:="削除確認")   If lngANSWER = vbYes Then     '元データのC列削除     ActiveSheet.Columns("C").Delete   End If      Set Sh = Nothing End Sub

acacdcdc
質問者

補足

>'対象シート定義 ※要書き換え >  Set Sh = ThisWorkbook.Sheets("Sheet1") ここはどのように書き換えたらよろしいでしょうか? 一つのブックに「20051127」「20051102」などの 名前のシートが並んでいます。 >  '最終行までループ >  For i = 2 To lngROWNUM >    With Sh.Cells(i, "C") >      '先頭に〒番号があるか? >      If StrConv(.Value, vbNarrow) Like "〒###-####*" Then ここの「〒###-###*」の箇所ですが 〒番号は全角で入っています。 また住所の入っている列はC列だったりD列だったり しているようです。 対象となる列のC2セルなりD2セルなりにカーソルが 有る状態にしてからのマクロの実行という操作に変更できますでしょうか? お手数ですが、よろしくお願いします。

関連する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えおか、のようにマクロで一機にできるソースをお願いします。