• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:Excel マクロ 特定文字の抽出)

Excelマクロで特定文字の抽出

このQ&Aのポイント
  • Excelマクロを使用して特定の文字を抽出する方法を質問させていただきました。回答者のjcctairaさんから教えていただいたマクロは、2列目のセルに指定した文字を抽出するものでした。
  • しかし、3桁の数字(先頭が0のもの)を抽出する場合、抽出結果が正しく表示されない問題が発生しました。
  • 正しい結果を得るために、どのようにマクロを修正すれば良いかご教示いただけますでしょうか。

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

  • ベストアンサー
  • jcctaira
  • ベストアンサー率58% (119/204)
回答No.2

hyogara777さん こんにちは。 方法は大きく2つあります。 1.セルにセットする値を文字(頭にアポストロフィー「'」を付ける)にする  Cells(i, "B") = "'" & strt 2.表示形式を変更する  2-1.文字形式にする   Cells(i, "B").NumberFormatLocal = "@"     Cells(i, "B") = strt  2-2.数字で3桁表示にする   Cells(i, "B").NumberFormatLocal = "000"     Cells(i, "B") = strt 上記から、自分にあった対応をしてください。

hyogara777
質問者

お礼

ご回答ありがとうございます。参考にさせて頂きます。

その他の回答 (4)

  • Wendy02
  • ベストアンサー率57% (3570/6232)
回答No.5

表示形式を文字列にした場合は、そのセルは参照しないということが条件になります。 数式などで、参照式を入れれば、参照したセルも文字列になってしまいますから、数式は計算されずに、数式になって現れてしまいます。 例: B列を文字列にすると B1: 012 C1: =MID(B1,1,2) 表示:=MID(B1,1,2) 数式がそのまま表示してしまうというバグがあります。(出ない場合は、何度か数式を入れていると、C1の表示形式が文字列になっています。だから、表示形式は、なるべく文字列にしないほうがよいのです。だから、接頭辞(Prefix)を付けて処理したほうがよいです。 なお、接頭辞(Prefix) の「'」アポストロフィーは、文字列としての認識を受けませんので、 B1: '012 C1: =LEN(B1) とすると、3 と出てきます。 表示形式の接頭辞として認識していれば、上記の場合は「4」にはなりません。

hyogara777
質問者

お礼

ご回答ありがとうございます。参考にさせて頂きます。

  • mu2011
  • ベストアンサー率38% (1910/4994)
回答No.4

B列を選択→セルの書式設定→表示形式を文字列するだけでマクロコードを追加する必要がありませんのでお試しください。

hyogara777
質問者

お礼

ご回答ありがとうございます。参考にさせて頂きます。

  • Wendy02
  • ベストアンサー率57% (3570/6232)
回答No.3

かならず、Cell/Rangeオブジェクトには、プロパティをつける習慣をつけましょう。 '// Sub SelectUpData()  Dim i As Long, j As Long, c As Variant  Application.ScreenUpdating = False  With ActiveSheet  For Each c In .Range("A1", .Cells(Rows.Count, "A").End(xlUp))   If c.Value <> "" Then    i = InStr(1, c.Text, "-", 1)    '2番目の塊なら、このままでよいし、もし3番目などでは、ここに加える    j = InStr(i + 1, c.Text, "-", 1)    c.Offset(, 1).Value = "'" & Mid$(c.Text, i + 1, j - (i + 1))   End If  Next  End With  Application.ScreenUpdating = True End Sub

hyogara777
質問者

お礼

ご回答ありがとうございます。参考にさせて頂きます。

  • conanthe
  • ベストアンサー率65% (114/175)
回答No.1

次のコードを試してください。 For i = 2 To last strt = Mid(Cells(i, 1), 6, 3) Cells(i, 2).NumberFormatLocal = "@" Cells(i, 2) = Format(strt, "0##") Next i

hyogara777
質問者

お礼

ご回答ありがとうございます。参考にさせて頂きます。