
A列3行目からはじまる(A列2行目タイトル=FA)データより"!"や"#"などの記号を取り除いた
ものをE列に表したいと思っています。
データを半角にして、ASC関数を使って記号を取り除こうとしたのですが、半角になるだけで
記号を取り除くことができません。
If の後、ASC関数は使用せず、"!"や"#"を指定しても結果が同じだったんですが
REPLACEの使い方が間違っているのでしょうか?
Dim セル As Range
Dim TARGET As Range
Dim 変換文字 As String
Dim i As Long
Dim W As Worksheet
Set W = Sheets("DATA転記")
Set TARGET = W.Range("A3", Range("A65536").End(xlUp))
For Each セル In TARGET
変換文字 = StrConv(セル.Text, vbNarrow)
For i = 1 To Len(変換文字)
If Asc(変換文字) >= 32 And Asc(変換文字) <= 47 And _
Asc(変換文字) >= 58 And Asc(変換文字) <= 64 And _
Asc(変換文字) >= 91 And Asc(変換文字) <= 96 And _
Asc(変換文字) >= 123 And Asc(変換文字) <= 126 Then _
変換文字 = WorksheetFunction.Replace(変換文字, i, 1, "")
End If
Next i
セル.Cells(, 5).Value = StrConv(セル.Text, vbWide)
Next セル
No.6ベストアンサー
- 回答日時:
> セルの範囲指定を足せばいいのでしょうか?
> また"!##aabbc@01^AB|"の意味を教えていただけると幸いです。
そうです。一例として記載したソースは、あくまで「こんなやり方でやれば良いよ」というだけのものでして。strEXに「!##aabbc@01^AB|」の文字列を格納し、このソースを実行するとstrANSに「aabbc01AB」が入ります。という例です。
質問者さんのソースにそのまま、このやり方を当てはめると。。。こうなりますネ。
Sub ex()
Dim セル As Range
Dim TARGET As Range
Dim 変換文字 As String
Dim 変換後文字 As String
Dim i As Long
Dim W As Worksheet
Set W = Sheets("DATA転記")
Set TARGET = W.Range("A3", Range("A65536").End(xlUp))
For Each セル In TARGET
変換文字 = StrConv(セル.Value, vbWide)
変換後文字 = ""
For i = 1 To Len(変換文字)
If Mid(変換文字, i, 1) Like "[0-9,a-z,A-Z,あ-ん,ア-ン]" Then
変換後文字 = 変換後文字 & Mid(変換文字, i, 1)
End If
Next
セル.Offset(, 4).Value = 変換後文字
Next
End Sub
テストしたわけじゃありませんので(^^; あとはうまくアレンジしてください。
No.5
- 回答日時:
なにを難しいことをやっているのかな。
簡単に
Sub test02()
d = Range("A65536").End(xlUp).Row
For i = 2 To d
x = Cells(i, "A")
y = Replace(x, "!", "")
z = Replace(y, "#", "")
Cells(i, "E") = z
Next i
End Sub
で良いのでは?
半角全角などあるのなら、Replaceを増やせば仕舞い。
>For i = 1 To Len(変換文字)
If Asc(変換文字) >= 32 And Asc(変換文字) <= 47 And _
など、全くおかしい。変換文字全体が、そういう文字コードの範囲内になるわけではないだろうし。
No.4
- 回答日時:
補足です。
一例として示したソースは、「英数字以外を削除する」という考え方ではなく
「英数字だけを抜き出す」という考え方になっています。
文字列を左から順に1文字ずつ判定し、英数字なら抜き出して別の変数に文字を繋げていく方法です。
No.3
- 回答日時:
Asc(変換文字) >= 32
ですが「変換文字」変数に入っている“何文字目”を判定していますか?(^^;
上記のままでは「変換文字」変数に入っている“文字列”の1文字目を、延々と判定している事になりますよ。
やりたい事は、もしかして
Asc(Mid(変換文字,i,1)) >= 32
じゃありませんか?(^^)
それと「0~9,a~z,A~Z 以外を削除したい」という事ですよね?であれば、IF文に Like 演算子を使用した方がシンプルかつ分かりやすくて良いです。
If Not Mid(変換文字,i,1) Like "[0-9,a-z,A-Z]" Then
ただ、If文後に Replace 文で「""」に置換してしまっていますよね?そうすると文字を削除した分、前にドンドン詰まって行くので「いま何文字目?」と聞いてもズレてしまいます。
なので、そこも注意が必要です。
で。一例です。
Sub ex()
Dim strEX As String
Dim strANS As String
Dim intCNT As Integer
strEX = "!##aabbc@01^AB|"
strANS = ""
For intCNT = 1 To Len(strEX)
If Mid(strEX, intCNT, 1) Like "[0-9,a-z,A-Z]" Then
strANS = strANS & Mid(strEX, intCNT, 1)
End If
Next
End Sub
この回答への補足
ご投稿いただき、ありがとうございます。
非常にわかりやすくご回答いただき、大変勉強になります。
ひらがなやカタカナもあるので変換文字をvbwideで全角に修正し
If Not Mid(変換文字, i, 1) Like "[0-9,a-z,A-Z,あ-ん,ア-ン]" Thenにし
取り急ぎreplaceは""を" "にし実行してみました。まさしく、希望通りの変換ができあがりました。
一例として教えていただいた方もやってみましたが、こちらだと変化なく(E列が全て空欄のまま)
実行が終わってしまいました。セルの範囲指定を足せばいいのでしょうか?
また"!##aabbc@01^AB|"の意味を教えていただけると幸いです。
お忙しいところお手数ではございますがよろしくお願いいたします。
No.2
- 回答日時:
NO1です。
追記です。
セル.Cells(, 5).Value = StrConv(セル.Text, vbWide)
↓
セル.Cells(, 5).Value = StrConv(変換文字, vbWide)
No.1
- 回答日時:
コード範囲毎にand条件ではなくOr条件にしないと成立しませんよ。
IfよりSwitch~Caseはお勧めします。
この回答への補足
早速のご投稿ありがとうございます。
or条件にしてもやっぱり記号が消えませんでした。
switch~caseは使用したことがないのですが、下記のように書き直してみましたが
(宣言部分省略)やはりうまくいきません。構文の組み立てがおかしいのでしょうか?
Dim セル As Range
Dim TARGET As Range
Dim 変換文字 As String
Dim 半角 As String
Dim i As Long
Dim W As Worksheet
Set W = Sheets("DATA転記")
Set TARGET = W.Range("A3", Range("A65536").End(xlUp))
For Each セル In TARGET
変換文字 = StrConv(セル.Text, vbNarrow)
For i = 1 To Len(変換文字)
Select Case 変換文字
Case Asc(変換文字) >= 32 And Asc(変換文字) <= 47
変換文字 = WorksheetFunction.Replace(変換文字, i, 1, "")
Case Asc(変換文字) >= 58 And Asc(変換文字) <= 64
変換文字 = WorksheetFunction.Replace(変換文字, i, 1, "")
Case Asc(変換文字) >= 91 And Asc(変換文字) <= 96
変換文字 = WorksheetFunction.Replace(変換文字, i, 1, "")
Case Asc(変換文字) >= 123 And Asc(変換文字) <= 126
変換文字 = WorksheetFunction.Replace(変換文字, i, 1, "")
End Select
Next i
セル.Cells(, 5).Value = StrConv(セル.Text, vbWide)
Next セル
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Excel(エクセル) エクセルシート中の全角英数字を半角に変換したい 4 2022/07/07 13:14
- Excel(エクセル) B列に文字がはいったらA列に数字が入るマクロードを完成させたい 4 2023/04/21 01:58
- Visual Basic(VBA) excel vbaでvlooupの変数がわかりません。 7 2022/05/30 09:35
- Visual Basic(VBA) ExcelVBAに関する質問 3 2023/02/17 10:47
- Visual Basic(VBA) 【VBA】写真の貼り付けコードがうまく機能しません。 5 2022/09/01 18:43
- Visual Basic(VBA) 稀に1円合いません? Sheet1から金額と個数を貼り付ける下記コードで、金額を切り上げるコードを何 3 2022/09/05 15:11
- Visual Basic(VBA) VBAの繰り返し処理について教えてください。 3 2022/08/02 13:21
- Excel(エクセル) 指定文字列が該当するA列をアクティブセルにするには 3 2022/08/17 13:18
- Excel(エクセル) R列の1111/11/11以外、且つQ列の×の条件で該当行のAからAE列までオレンジに塗りつぶす 2 2022/07/02 10:18
- Visual Basic(VBA) このVBAでExcelアプリケーションを作成は必要ですか? 3 2023/07/19 21:13
このQ&Aを見た人はこんなQ&Aも見ています
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
勤怠表について ABS、TEXT関数...
-
エクセルの関数について
-
Excelで4択問題を作成したい
-
エクセル
-
エクセルの表で作業してます。 ...
-
エクセル GROUPBY関数について...
-
エクセルの複雑なシフト表から...
-
【Officer360?Officer365?の...
-
エクセルについて
-
Amazonでマイクロソフトオフィ...
-
グループごとの人数のカウント
-
グループごとの人数のカウント
-
エクセルシートの見出しの文字...
-
グループごとの個数をカウント...
-
【マクロ】別ファイルへマクロ...
-
【マクロ】変数に入れるコード...
-
【マクロ】実行時エラー '424':...
-
ページが変なふうに切れる
-
9月17日でサービス終了らし...
-
エクセルのリストについて
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
【Excel関数】特定の文字を別表...
-
DocuWorks 文字認識 検索でき...
-
文字変換において、m3(立方)の...
-
エクセルでインチの分数表示
-
PowerPointで比例記号を入力す...
-
VBAで小数を16進数に変換
-
EXCEL VBA 記号の削除
-
和暦を西暦に変換する方法
-
ハガキ宛名の住所の数字を漢数...
-
subject moji bake...
-
エクセルで住所の数字を漢数字...
-
立法メートルの単位の入力
-
エクセルで、150(秒)と打ち込...
-
huawei nova liteというと、ち...
-
USB->シリアル変換コネクター自作
-
DCR-IP1k で録画したMICROMVテ...
-
mp4→sb1
-
税金を盗る
-
wordで→「┗」はどうやって変換...
-
メールの文字化けについて
おすすめ情報