以下のように、一つのセルに、数字がカンマで区切られて入力されているデータが数万件あります。
A列1行目
「10, 20, 30, 40, 50, 80, 110, 120, 130」
A列2行目
「10, 20, 40, 80, 110, 130」
A列3行目
「50, 100, 110, 120, 130」
●それぞれ、2桁の数字を、始めに「0」をつけて、3桁にしたいです。
●セルは全て文字列設定になっています。
●「10」を検索し、「010」に置換えようとしたら、「110」も検索対象になってしまい、「1010」になってしまいました。
★完成させたい答え
1行目
「010, 020, 030, 040, 050, 080, 110, 120, 130」
2行目
「010, 020, 040, 080, 110, 130」
3行目
「050, 100, 110, 120, 130」
関数などで短時間で出来る方法を教えて下さい。よろしくお願いします。
No.6ベストアンサー
- 回答日時:
No.4です。
失礼しました。データが入っているのはA列だけではないのですね。
それでは以下のようにマクロを上書きしてください。
データが数万件もあると、かなり時間がかかるかもしれません。
なにか不具合が起こったときのために、元のファイルのバックアップはとっておいた方がよいでしょう。
Sub format3keta()
Dim r As Range
Dim s As Variant
Dim i As Integer
Dim NewStr As String
For Each r In ActiveSheet.UsedRange
If r.Value <> "" Then
s = Split(r.Value, ",")
NewStr = ""
For i = 0 To UBound(s)
If i = 0 Then
NewStr = Format(s(i), "000")
Else
NewStr = NewStr & "," & Format(s(i), "000")
End If
Next
r.Value = NewStr
End If
Next
End Sub
早急なご対応、本当に感謝しています。業務が止まらず作業出来、助かりました。そして、本当、たびたびで申し訳ないのですが、あと1点教えて頂けますでしょうか。
今回お教えいただいたのは、それぞれのNoの前に「0」をつけるものでしたが、今度は、後ろに「0」をつける方法もお教え頂けますか。
●
A列1行目
「01, 02, 03, 04, 05, 08, 110, 120, 130」
A列2行目
「01, 02, 04, 08, 110, 130」
A列3行目
「05, 100, 110, 120, 130」
★完成させたい答え
1行目
「010, 020, 030, 040, 050, 080, 110, 120, 130」
2行目
「010, 020, 040, 080, 110, 130」
3行目
「050, 100, 110, 120, 130」
※違うパターンのデータを見つけてしまい困ってしまいました。マクロのどこかを変えればいいのだと思い考えてみたのですが、意味を理解していない為、修正出来ませんでした。
よろしくお願い致します。
No.8
- 回答日時:
なるほど、前とは別のデータで、別の方法で処理したいということですね。
それでは、そっち専用のマクロが必要ですね。ちょっとの修正でできました。最初のマクロとは別の処理をするので、マクロの名前も変えてあります(2と名前の後ろにつけただけですが)Sub format3keta2()
Dim r As Range
Dim s As Variant
Dim i As Integer
Dim NewStr As String, Val As String
For Each r In ActiveSheet.UsedRange
If r.Value <> "" Then
s = Split(r.Value, ",")
NewStr = ""
For i = 0 To UBound(s)
Val = Left(Trim(s(i)) & "000", 3)
If i = 0 Then
NewStr = Val
Else
NewStr = NewStr & "," & Val
End If
Next
r.Value = NewStr
End If
Next
End Sub
No.7
- 回答日時:
修正してみました。
「データが2桁で0から始まる場合、後ろに0を付け足す」という処理を入れています。
他のパターンはないですか?1桁の場合とか...
Sub format3keta()
Dim r As Range
Dim s As Variant
Dim i As Integer
Dim NewStr As String, Val As String
For Each r In ActiveSheet.UsedRange
If r.Value <> "" Then
s = Split(r.Value, ",")
NewStr = ""
For i = 0 To UBound(s)
If Len(s(i)) = 2 And Left(s(i), 1) = "0" Then
Val = s(i) & "0"
Else
Val = Format(s(i), "000")
End If
If i = 0 Then
NewStr = Val
Else
NewStr = NewStr & "," & Val
End If
Next
r.Value = NewStr
End If
Next
End Sub
何度も申し訳ありません。
説明が不足していました。
「2桁で0から始まる場合のみ」ではなく、「2桁のものは全て後ろに0をつける」が必要です。
全く違う経路からきたデータがあるとわかったのです。
よって、さきほど教えて頂いたもの(2桁のNoの前に「0」をつけ、3桁にする)とは別に、「2桁のNoの後ろに「0」をつける」を新しく教えて頂ければと思います。
よろしくお願いします。
No.5
- 回答日時:
◆関数による回答ですが、どうしても作業列が必要です
A B C D
1 10, 20, 30, 40, 50, 80, 110, 120, 130 010, 020, 030, 040, 050, 080, 110, 120, 130 8 6
2 10, 20, 40, 80, 110, 130 010, 020, 040, 080, 110, 130 5 4
3 50, 100, 110, 120, 130 050, 100, 110, 120, 130 4 1
C1=LEN(A1)-LEN(SUBSTITUTE(A1,",",))
D1=SUMPRODUCT(N(MOD(FIND("♪",SUBSTITUTE(" "&A1,",","♪",ROW(INDIRECT("1:"&C1)))),4)=0))
B1=MID(SUBSTITUTE(LEFT(" "&A1,FIND("♪",SUBSTITUTE(" "&A1,",","♪",(D1))))," "," 0"),2,LEN(A1))&REPLACE(A1,1,FIND("♪",SUBSTITUTE(" "&A1,",","♪",(D1)))-1,)
★共に下にコピー
ご回答、ありがとうございました。
ある程度は正しい答えが出たのですが、完璧ではなかったので、再度質問させて下さい。
10, 30, 50, 70, 80, 100, 110, 130, 140, 160
↓
010, 030, 050, 070, 080, 0100, 0110, 130, 140, 160
上記のように、100と110のみ、4桁になってしまいます。
※ただ、絶対4桁になるわけでもありません。3桁のまま正しい答えが出るものもあります。
申し訳ありませんが、よろしくお願い致します。
No.4
- 回答日時:
1.Alt+F11を押す。
2.VBAの画面になるので、右側の画面に以下のマクロをコピーして貼り付ける。
Sub format3keta()
Dim r As Range
Dim s As Variant
Dim i As Integer
Dim NewStr As String
For Each r In Range("A1", Range("A65536").End(xlUp))
s = Split(r.Value, ",")
NewStr = ""
For i = 0 To UBound(s)
If i = 0 Then
NewStr = Format(s(i), "000")
Else
NewStr = NewStr & "," & Format(s(i), "000")
End If
Next
r.Value = NewStr
Next
End Sub
3.そのままF5キーを押す。
4.Excelの画面に戻ると3桁に揃っているはず。
ご回答ありがとうございました。
一度に出来て感激しました。(VBAを勉強していないので意味があまり理解出来ていないのですが・・)
1つ、再度質問させてください。
このマクロだと、1列のみの実行だと思います。
いくつもの列に対して実行したい場合は、VBA画面を開き、列番号を変更して実行(F5)する事を何度か行うしか方法はないでしょうか?
たびたびの質問ですみませんがよろしくお願いします。
No.2
- 回答日時:
以下の手順でいかがでしょうか?
新しいブックのA列にコピー
A列を選択して、メニューのデータ→区切り位置でカンマにて分ける
数字の入ったセルを含む範囲(全体でもいいです)を選択して、右クリック→セルの書式設定を選択
表示形式タブでユーザー定義を選択、右側に"000"と入力
名前を付けて保存 ファイルの種類からCSV(カンマ区切り)を選択
メモ帳などで開く
No.1
- 回答日時:
10を検索するのではなく
0,を検索して0,0に置き換えては如何でしょうか?
ワイルドカードでいうところの「1文字」を表す「.」を使って
.,.→.,0.
でも良いかもしれませんね
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・人生のプチ美学を教えてください!!
- ・10秒目をつむったら…
- ・あなたの習慣について教えてください!!
- ・牛、豚、鶏、どれか一つ食べられなくなるとしたら?
- ・【大喜利】【投稿~9/18】 おとぎ話『桃太郎』の知られざるエピソード
- ・街中で見かけて「グッときた人」の思い出
- ・「一気に最後まで読んだ」本、教えて下さい!
- ・幼稚園時代「何組」でしたか?
- ・激凹みから立ち直る方法
- ・1つだけ過去を変えられるとしたら?
- ・【あるあるbot連動企画】あるあるbotに投稿したけど採用されなかったあるある募集
- ・【あるあるbot連動企画】フォロワー20万人のアカウントであなたのあるあるを披露してみませんか?
- ・映画のエンドロール観る派?観ない派?
- ・海外旅行から帰ってきたら、まず何を食べる?
- ・誕生日にもらった意外なもの
- ・天使と悪魔選手権
- ・ちょっと先の未来クイズ第2問
- ・【大喜利】【投稿~9/7】 ロボットの住む世界で流行ってる罰ゲームとは?
- ・推しミネラルウォーターはありますか?
- ・都道府県穴埋めゲーム
- ・この人頭いいなと思ったエピソード
- ・準・究極の選択
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
エクセルで特定の文字列が入っ...
-
エクセル 上下で列幅を変えるには
-
エクセルVBA:データ端に画...
-
エクセル マクロ オートフィ...
-
【Excel関数】UNIQUE関数で"0"...
-
[EXCEL]ボタン押す→時刻が表に...
-
VBAで色の付いているセルの行削除
-
A1に入力された文字列と同じ文...
-
セルの色によって条件文をつけ...
-
特定の文字がある行以外を削除...
-
エクセル 時間の表示形式AM/PM...
-
結合されたセルをプルダウンの...
-
Excel グラフのプロットからデ...
-
エクセル マクロで数値が変っ...
-
エクセルVBA 最終行を選んで並...
-
エクセルマクロで偶数行(又は...
-
Excelでカタカナ・ひらがな・英...
-
EXCEL VBA マクロ 別シートの...
-
エクセルの列幅以上の文字列を...
-
空白行から空白行までの合計値...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
エクセルで特定の文字列が入っ...
-
【Excel関数】UNIQUE関数で"0"...
-
特定の文字がある行以外を削除...
-
エクセル マクロ オートフィ...
-
[EXCEL]ボタン押す→時刻が表に...
-
AのセルとB行を比較して、一致...
-
VBAで色の付いているセルの行削除
-
Excel グラフのプロットからデ...
-
エクセル マクロで数値が変っ...
-
excel 小さすぎて見えないセル...
-
エクセル 上下で列幅を変えるには
-
罫線の斜線を自動で引くマクロ
-
結合されたセルをプルダウンの...
-
セルの色によって条件文をつけ...
-
エクセルのマクロで意図しない...
-
エクセルVBA 最終行を選んで並...
-
excelのデータで色つき行の抽出...
-
Excelのフィルター後の一番上の...
-
エクセル 時間の表示形式AM/PM...
-
Excelでカタカナ・ひらがな・英...
おすすめ情報