- ベストアンサー
Excelマクロで特定文字の抽出
- Excelマクロを使用して特定の文字を抽出する方法を質問させていただきました。回答者のjcctairaさんから教えていただいたマクロは、2列目のセルに指定した文字を抽出するものでした。
- しかし、3桁の数字(先頭が0のもの)を抽出する場合、抽出結果が正しく表示されない問題が発生しました。
- 正しい結果を得るために、どのようにマクロを修正すれば良いかご教示いただけますでしょうか。
- みんなの回答 (5)
- 専門家の回答
質問者が選んだベストアンサー
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 上記から、自分にあった対応をしてください。
その他の回答 (4)
- Wendy02
- ベストアンサー率57% (3570/6232)
表示形式を文字列にした場合は、そのセルは参照しないということが条件になります。 数式などで、参照式を入れれば、参照したセルも文字列になってしまいますから、数式は計算されずに、数式になって現れてしまいます。 例: B列を文字列にすると B1: 012 C1: =MID(B1,1,2) 表示:=MID(B1,1,2) 数式がそのまま表示してしまうというバグがあります。(出ない場合は、何度か数式を入れていると、C1の表示形式が文字列になっています。だから、表示形式は、なるべく文字列にしないほうがよいのです。だから、接頭辞(Prefix)を付けて処理したほうがよいです。 なお、接頭辞(Prefix) の「'」アポストロフィーは、文字列としての認識を受けませんので、 B1: '012 C1: =LEN(B1) とすると、3 と出てきます。 表示形式の接頭辞として認識していれば、上記の場合は「4」にはなりません。
お礼
ご回答ありがとうございます。参考にさせて頂きます。
- mu2011
- ベストアンサー率38% (1910/4994)
B列を選択→セルの書式設定→表示形式を文字列するだけでマクロコードを追加する必要がありませんのでお試しください。
お礼
ご回答ありがとうございます。参考にさせて頂きます。
- Wendy02
- ベストアンサー率57% (3570/6232)
かならず、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
お礼
ご回答ありがとうございます。参考にさせて頂きます。
- conanthe
- ベストアンサー率65% (114/175)
次のコードを試してください。 For i = 2 To last strt = Mid(Cells(i, 1), 6, 3) Cells(i, 2).NumberFormatLocal = "@" Cells(i, 2) = Format(strt, "0##") Next i
お礼
ご回答ありがとうございます。参考にさせて頂きます。
お礼
ご回答ありがとうございます。参考にさせて頂きます。