
No.6ベストアンサー
- 回答日時:
「一度でできる」というのは自分でマクロを組んだ上で
一回の操作でできればいいという話ですか?
#てっきり一命令でという話かと
であるなら、#4の方の回答のようにすればよいと思います。
Function Sample(ByVal vArg As String) As String
Dim oReg
Dim sStr As String
Set oReg = CreateObject("VBScript.RegExp")
oReg.Pattern = "[^0-9A-Za-z.,]+"
oReg.Global = True
sStr = vArg
sStr = oReg.Replace(sStr, "")
Sample = sStr
End Function
このユーザー定義関数を使えばたとえば
100 ABC-23d=3,4 から 100ABC23d3,4
までは変換できます。
あとはこの関数に 小文字→大文字の変換の命令と
カンマ→ドット への命令を付け足せばよいです。
あと、どうせなら範囲選択して呼び出すとその範囲全部に関数を適用するように
マクロを作ればいいと思いますが、そこまでは
面倒見切れないので提案だけ。
回答有難うございます。
はい、一回の操作で出来れば…と考えてました。
でもNo.6さんや他の方に教えて頂いた内容が良く理解出来ません。。。
本当に難しいですね。
もっと勉強しながら、教えて頂いた内容が出来るようがんばります。
いずれは
>あと、どうせなら範囲選択して呼び出すとその範囲全部に関数を適用するようにマクロを作ればいいと思いますが、
これ、実現したいです ^^
No.7
- 回答日時:
> そのまま使える数式など教えて頂けると嬉しいです。
そのように便利な数式とか関数はないと思いますよ。
[イミディエイト]
? PurgeChar("100 ABC-23d=3,4"," ,-,=,+,/,×,÷")
100ABC23d3,4
? ReplaceChar("100 ABC-23d=3,4", ",->.||、->.")
100 ABC-23d=3.4
PurgeChar関数は、コンマ(,)で区切られた文字の全てを文字列から追放します。
ReplaceChar関数は、’||’で指示された置換を全て実行します。
これらを組み合わせるしかないと思います。
? UCASE(ReplaceChar(PurgeChar("100 ABC-23d=3,4"," ,-,=,+,/,×,÷"), ",->.||、->."))
100ABC23D3.4
追放する文字列等は、
Const 追放文字列=" ,-,=,+,/,×,÷"
Const 置換文字列=",->.||、->."
と定義すべきかと・・・。
UCASE(ReplaceChar(PurgeChar("100 ABC-23d=3,4",追放文字列), 置換文字列))
これが実際のVBAのコード。
種々の手続きを非手続き的に実行したけりゃ、それぞれの処理を担当する関数を作成するが一番。
私は、このように思います、
この回答への補足
回答者の皆様へ
色々教えて頂き本当に有難うございます。
「出来ました!!」と言うお礼がしたかったのですが、難しくて未だ実行できていません。。。
でも教えて頂いた内容を絶対に出来るようにがんばります。
皆様へポイントを差し上げたかったのですが…今回は2回、回答頂いた方にポイント付けさせて頂きます。
本当に有難うございました。
回答有難うございます。
そんな便利な数式ありませんよね。。。
最近VBAの勉強始めて、今まで関数など繰り返していた操作が一度に出来るようになって感動しちゃって。
こんな事も出来るかな??と欲が出てしまいました ^^
皆さんに教えて頂いた内容、まだ良く理解出来てないんですが
もっと勉強して実行できるようがんばります!!
No.5
- 回答日時:
> そのまま使える数式など教えて頂けると嬉しいです。
例えば
dim strTarget As String
今回の場合数式が、
「100 ABC-23d=3,4」とすると
strTarget = "100 ABC-23d=3,4"
1.文字列を置換するときは、Replace関数と言うものを使います。
スペースを削除すると言うことは、スペースをNull文字に置換すると言うのと同義です。
なので、
※1
Replace(strTarget,Space(1),vbNullString)
Space(1)と言うのは、" "と同じ意味です。
また、vbNullStringは ""と同じ意味です。
同様に、カンマをドットへ変換も、Replace関数が使えます。
なので、
※2
Replace(strTarget,",",".")
でカンマをドットに変換することができます。
※1と※2を組み合わせると※2のstrTargetを※1の式に変換して
※3
Replace(Replace(strTarget,Space(1),vbNullString),",",".")
となります。
2.小文字を大文字に変換する関数は、UCaseという関数を使います。
#逆に大文字を小文字にしたいときは、LCaseを使います。
※4
Ucase(strTarget)
で小文字が大文字に変換できます。
なので、※3と※4の式を組み合わせると※4のstrTargetを※3の式に変換して
※5
Ucase(Replace(Replace(strTarget,Space(1),vbNullString),",","."))
となります。
上記の式(※5)で、
(1)スペース削除
(2)小文字を大文字へ
(4)","→ "." (カンマをドットへ変換)
の変換は出来ると思いますが、いかがでしょうか?
回答有難うございます。
難しいです。。。
VBAは最近始めたばかりで、実は "dim" って何??レベルなんです。。。
教え頂いた内容を良く読んで、がんばってみます!!

No.4
- 回答日時:
●甲案:VBAで…。
正規表現を使えばもっとスマートにできるのではないかと思いますが、
とりあえず、ぢみ~に回してチェックするアプローチで…。
動作の概要
引数として与えられた文字列について、
・カンマ","をピリオド"."に置換
・小文字のアルファベットを大文字に変換
・アルファベット,数字,ピリオド以外の文字を削除
した文字列を返す。
※ユーザー定義関数です。
ワークシート上で関数として使うことを想定しています。
=Sample(A1)
※全角文字はすべて削除されます。
全角英数字を半角に直して残す場合は、ワークシート上で、
=Sample(ASC(A1))
のようにしてください。
'--------------------↓ ココカラ ↓--------------------
Function Sample(ByVal myStr As String) As String
'残す文字
myChr = "ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789."
myRtv = ""
myStr = Replace(myStr, ",", ".")
myStr = UCase(myStr)
For i = 1 To Len(myStr)
For j = 1 To Len(myChr)
If Mid(myStr, i, 1) = Mid(myChr, j, 1) Then
myRtv = myRtv & Mid(myStr, i, 1)
Exit For
End If
Next j
Next i
Sample = myRtv
End Function
'--------------------↑ ココマデ ↑--------------------
Excel2003で(一応)動作確認済
*****************************************************************
●乙案:ワークシート関数で…。
地味というよりほとんど冗談ですが…。
A列1行目以下に元のデータが入っているとします。
元のデータの文字数が全体で20文字以内だとします。
1.B1セルに以下の数式を【配列数式として】入力する
=REPLACE(SUBSTITUTE(UPPER(ASC(A1)),",","."),MATCH(0,MMULT(TRANSPOSE(ROW($1:$37)),--(MID("ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789.",ROW($1:$37),1)=TRANSPOSE(MID(SUBSTITUTE(UPPER(ASC(A1)),",","."),ROW($1:$20),1)))),0),1,"")
通常の数式は、数式バーに打ち込んだ後Enterキーで確定しますが、
配列数式は、CtrlとShiftを押しながらEnterキーを押して確定します。
http://pc.nikkeibp.co.jp/pc21/special/hr/hr1.shtml
2.B1セルをU列まで右方にフィルする
U列←B列から数えて第20列
3.B1:U1を下方にフィルする
4.B列~T列を非表示にする
U列に表示される文字列が求める文字列…のハズです。
Excel2003で(一応)動作確認済。
元のデータの文字数が20文字より長い場合には、
数式の$20となっている部分を増やし、
U列よりさらに右方にフィルしてください。
$37は、アルファベット26文字+数字10文字+ピリオドで37。
元データの文字数とは関係ありません。
以上ご参考まで。長乱文陳謝。
回答有難うございます。
なんか…すごく複雑ですね。
VBAは最近勉強始めた全くの初心者なので、上手く出来ません。。。
教えて頂いた内容を良く読んで、VBAをもっと勉強しながら、がんばってみます!!
No.3
- 回答日時:
1と2と4
MsgBox UCASE(REPLACE(REPLACE("100 ABC-23d=3,4", Space(1),vbNullstring),",","."))
3はちょっと他の方へパス(手間なので)
回答有難うございます。
教えて頂いた数式をやってみたのですが、上手く出来ませんでした。
質問の文字列は参考例で、様々な数値、パターンがあるんですが
それが問題なのでしょうか?
初心者なので、数式から応用が出来なくて。。。
説明不足で申し訳ございません。
1と2と4だけでも、一度で出来る数式があればかなり助かるのですが。
そのまま使える数式など教えて頂けると嬉しいです。
No.2
- 回答日時:
(1)はスペースは1個・2個・3個・・・・
(3)は"-","="以外にはない?"+"とか"/"とか"×"とか"÷"とか。
回答有難うございます。
>(1)はスペースは1個・2個・3個・・・・
スペースは有ったり無かったり1個だったり2個だったり。。。
>(3)は"-","="以外にはない?"+"とか"/"とか"×"とか"÷"とか。
あるんです。。。これ以外にも"[" "%" とか色々。。。
これらを一度に処理したいと思うのは、ちょっと手抜き過ぎですね。
客先が正しい品番を入力してくれのが一番なんですけどね。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) 特定の文字を簡単な操作で半角スペースに変換するか削除したい 2 2022/11/01 10:35
- Visual Basic(VBA) VBAで、特定の文字より後を削除して残った数値を文字列に変換と特定の文字より前も削除したい 3 2022/04/15 19:21
- Visual Basic(VBA) Excel VBAでAA(BBB) → BBB.AA に置換したい 2 2022/10/30 13:59
- Visual Basic(VBA) EXCEL VBAで教えてください。 1 2022/12/22 04:20
- Visual Basic(VBA) Excel VBA 教えてください。 VBA初心者です。 詳しい方がいましたら教えてください。 下記 3 2023/04/25 11:22
- Visual Basic(VBA) EXCEL VBA 単語置き換え について質問です ブック名 ぶぶぶ シート名 ししし セル V3〜 3 2023/03/08 01:41
- オープンソース csvデータのダブルクォーテーションで囲まれた文字内にあるカンマを削除したい 3 2022/09/02 15:17
- Visual Basic(VBA) 列を指定して値を左から5文字にそろえる 1 2022/06/10 20:28
- Excel(エクセル) Excelの複数置換はSUBSTITUTEを重ねるしかない? 9 2022/05/08 11:25
- Visual Basic(VBA) 以下のVBAで該当文字列の前後に付与したい。 例 前に付与 abc ユーザーID 12345 後に付 3 2022/04/19 21:50
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
Vba Array関数について教えてく...
-
エクセルのマクロについて教え...
-
vbsでのwebフォームへの入力制限?
-
【マクロ】シートの変数へ入れ...
-
【マクロ】売上一覧YYYYMMDDHHS...
-
Vba セルの4辺について罫線が有...
-
【マクロ】並び替えの範囲が、...
-
【ExcelVBA】5万行以上のデー...
-
【マクロ】開いているブックの...
-
エクセルの改行について
-
vb.net(vs2022)のtextboxのデザ...
-
エクセルのVBAコードと数式につ...
-
算術演算子「¥」の意味について
-
VBA 入力箇所指定方法
-
【マクロ】モジュール変数の記...
-
Vba FileSystemObject オブジェ...
-
Excelのマクロについて教えてく...
-
【ExcelVBA】値を変更しながら...
-
vbaにてseleniumを使用したedge...
-
【ExcelVBA】値を変更しながら...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
Vba セルの4辺について罫線が有...
-
vbsでのwebフォームへの入力制限?
-
【ExcelVBA】5万行以上のデー...
-
【マクロ】売上一覧YYYYMMDDHHS...
-
【マクロ】開いているブックの...
-
【マクロ】並び替えの範囲が、...
-
エクセルの改行について
-
エクセルのマクロについて教え...
-
vb.net(vs2022)のtextboxのデザ...
-
VBAでCOPYを繰り返すと、処理が...
-
VBA ユーザーフォーム ボタンク...
-
エクセルのVBAコードと数式につ...
-
エクセルのVBAコードについて教...
-
[VB.net] ボタン(Flat)のEnable...
-
【マクロ】変数を使った、文字...
-
改行文字「vbCrLf」とは
-
質問58753 このコードでうまく...
-
【マクロ】シートの変数へ入れ...
-
ワードの図形にマクロを登録で...
-
算術演算子「¥」の意味について
おすすめ情報