全角文字で書かれた、日本語の文があります。(一般的な文章ですので、文字数は勿論任意です)
その中に、半角英数字8文字で書かれたID番号が点在しています。
(IDの前後の文字数、またひとつの分の総文字数は任意です)
…という内容が一つのセルに入っていて、それが数千行あるエクセルのブックがあります。
この中から、半角英数字8文字のIDのみ、取り出したいのです。
(半角英数字はIDにしか使われていない、という認識です)
1)半角8桁の英数字だけ別セルに取り出す
関数で何とかならないかと思いましたが、ごく一般的な文章なので、IDの前後の文字数がバラバラで断念しました
2)全角文字のみ検索し、置き換えで削除する
ワードにコピーしてやってみようと思いました。
2003なのですが、「任意の英数字」は検索できても、「任意の全角文字」の検索機能はないようです。
(「任意の文字」の項目が、全角文字に該当するのかと思い、検索置換をしてみたら、どうやら半角英数字も該当するようでした)
実際困っております。
何かいい手はないでしょうか。
A 回答 (6件)
- 最新から表示
- 回答順に表示
No.6
- 回答日時:
無理やり関数で処理してみました(半分冗談ですが)
一つのセルに入る文字数は高々 32767=2^15-1 文字ですから、
半分ずつに区切って、半角文字を含むかどうかの判定を繰り返せば、
最大でも15回で位置が判明します。
以下、元データがA列2行目以降に入っているとします。
1.A1セル:=2^(INT(LOG(MAX(LEN(A2:A9999)),2))+1)
を配列数式として入力(Ctrl+Shift+Enter)
2.B1セル:=A1/2
3.B2セル:=(LEN(LEFT($A2,B$1))*2)=LENB(LEFT($A2,B$1))
4.C2セル:=(LEN(LEFT($A2,SUM($B$1:B$1*$B2:B2)+C$1))*2)=LENB(LEFT($A2,SUM($B$1:B$1*$B2:B2)+C$1))
を配列数式として入力(Ctrl+Shift+Enter)
5.B1セルを1が返るまで右方向にフィル(以下、仮にH1が1になったとします)
6.C2セルをH列まで右方向にフィル
7.I1セル:=MID($A2,SUM($B$1:$H$1*$B2:$H2)+1,8) ←5によってセル範囲変わります
を配列数式として入力(Ctrl+Shift+Enter)
8.B2,C2,…,Q2セルをそれぞれ下方向にフィル
…の前に下記註をご参考下さい。
Excel2003で動作確認済
※下方向へのフィルを複数列まとめてやると、固まるかもしれません。
※必要に応じて、列単位で処理⇒その都度値貼り付けで確定 など工夫してください。
※セル内改行:CHAR(10)は半角扱いになるので、
セル内改行がある場合はあらかじめ削除しておいてください。
No.5
- 回答日時:
#あ、いけね、俺のコード
テストに用いた時の名残で
[0-9a-zA-z]{7}
になってる
[0-9a-zA-z]{8}
ね。
ま、この辺は大体皆似たような手法になるか。
No.4
- 回答日時:
こんにちは。
#2 で書いた者ですが、パターンがダブっていました。
.Pattern = "[^\w\d]"
↓
.Pattern = "[^\w]"
ただし、パターンは、\wですと、半角英数字で、「_ (アンダースコア)」が入ってしまいます。
必ず、半角英数を8文字を出すようにしてみました。また、一行に複数あっても、カンマつきですが、出力するようにしました。値コピーして、それで、区切り位置に、「,(カンマ)」を使えば、セルひとつずつに別けることも可能です。
それと、IngnoreCase =True なら、大文字・小文字は関係ありません。
単に、アンダースコアが気にならないのなら、\w{8}でも可能です。
Function RegGetCode(myStr As String) As String
Dim Match As Object
Dim buf As String
With CreateObject("VBScript.RegExp")
.Pattern = "[0-9a-z]{8}" '"\w{8}"
.Global = True
.IgnoreCase = True
If .Test(myStr) Then
For Each Match In .Execute(myStr)
buf = buf & "," & Match.Value
Next
RegGetCode = Mid$(buf, 2)
End If
End With
End Function
No.3
- 回答日時:
エクセルで回答します。
昨日の回答の使い回しで申しわけありませんがhttp://oshiete1.goo.ne.jp/qa3158346.html No.3
で1行変更すれば半角英数字を取り出せます。変更するのは以下です
変更前 strPattern = "[0-9A-Za-z0-9A-Za-z]"
変更後 strPattern = "[0-9A-Za-z]"
でも文章中に半角英数字はID以外になく、IDは8文字と決まっているなら関数でもできそうですね。A1に文字列があるとき
=MID($A$1,MAX(INDEX((CODE(MID($A$1,ROW(INDIRECT("1:"&LEN($A$1))),1))<123)*ROW(INDIRECT("1:"&LEN($A$1))),))-7,8)
で半角英数字8桁を取り出せます。
No.2
- 回答日時:
こんにちは。
>全角文字のみ検索し、置き換えで削除する
ということなら、
'標準モジュール
Function RegRepl(myStr As String) As String
With CreateObject("VBScript.RegExp")
.Pattern = "[^\w\d]"
.Global = True
RegRepl = .Replace(myStr, "")
End With
End Function
においてあげればよいはずです。ただし、半角英数が点在していたら、これは役には立ちません。
VBE に貼り付けたら、以下のような数式にしてあげれば出来ます。
=RegRepl(A1)
No.1
- 回答日時:
Option Explicit
'Excel VBA
Sub Sample2()
Dim RE As Object
Dim strPattern As String
Dim msg As String
Dim MatchCollection As Object
Dim Match As Object
Dim r As Object
Set RE = CreateObject("VBScript.RegExp")
strPattern = "[0-9a-zA-z]{7}"
With RE
.Pattern = strPattern
.IgnoreCase = True
.Global = True
For Each r In ActiveSheet.UsedRange
Set MatchCollection = .Execute(r)
If MatchCollection.Count > 0 Then
For Each Match In MatchCollection
msg = msg & Match.Value & vbCrLf
Next
End If
Next
End With
MsgBox msg
Set Match = Nothing
Set RE = Nothing
End Sub
とかは?
参考資料
http://officetanaka.net/excel/vba/tips/tips38.htm
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- その他(Microsoft Office) WordやExcelで英数字のみ半角または全角にしたい 6 2022/08/03 08:18
- Excel(エクセル) capeofdragonと申します Excel2016を使っておりまして 半角又は全角の任意文字列が 2 2022/10/31 13:51
- Visual Basic(VBA) 特定の文字を簡単な操作で半角スペースに変換するか削除したい 2 2022/11/01 10:35
- Visual Basic(VBA) エクセルの数式で教えてください。 1 2023/07/31 15:49
- Access(アクセス) Accessのテキストボックスの入力文字制限 1 2023/01/18 20:43
- その他(データベース) Accessのクエリで1フィールドの抽出条件設定をNullでなく全角半角含む空白のみの文字列でない文 1 2023/04/24 15:20
- Excel(エクセル) Excel 365 フリーズ 頻発 エクセルのセルの中に日本語の文章を全角半角和文英文数字を混ぜて入 3 2022/12/12 15:09
- Excel(エクセル) エクセルの数式で教えてください。 2 2023/03/09 16:55
- Excel(エクセル) Excelで校閲をする方法はあるでしょうか(取扱説明書への掲載禁止用語の確認) 3 2022/06/11 22:51
- その他(ソフトウェア) ソースネクストアプリをインストールし、製品登録で半角英数字が入力できない 5 2022/07/03 22:44
このQ&Aを見た人はこんなQ&Aも見ています
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
SUMIF関数で、「ブランク以外を...
-
EXCELのcountif関数での大文字...
-
エクセル1行おきのセルを隣の...
-
自分の左隣のセル
-
文字列から英数字のみを抽出す...
-
EXCELでマイナス値の入ったセル...
-
条件付き書式の色付きセルのカ...
-
エクセル、○が連続する回数を数...
-
エクセルでエンターを押すと任...
-
excelで、空白を除いてデータを...
-
エクセルVBAでチェックボックス...
-
EXECL バーコード生成でBarCode...
-
Excelで日付が入っていたら金額...
-
ある列、或いは、ある行のセル...
-
エクセルで年月日から月日のみへ
-
EXCEL マクロで2つの作業を行い...
-
エクセルで、指定の値よりも大...
-
エクセルで空白で無いセルの数...
-
エクセルの使い方エクセルにつ...
-
エクセルVBA 行列の数を指定し...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
SUMIF関数で、「ブランク以外を...
-
文字列から英数字のみを抽出す...
-
エクセル1行おきのセルを隣の...
-
自分の左隣のセル
-
エクセルで、指定の値よりも大...
-
excelで、空白を除いてデータを...
-
セルを結合した時のエクセル集...
-
エクセルで、A2のセルにA3...
-
エクセルで年月日から月日のみへ
-
エクセルに入力後、別シートの...
-
【Excel】4つとばしで合計する方法
-
Excelで大量のセルに一気に関数...
-
エクセルで特定のセル内にだけ...
-
EXCELのcountif関数での大文字...
-
EXCELでマイナス値の入ったセル...
-
条件付き書式の色付きセルのカ...
-
エラー「#REF」の箇所を置き換...
-
Excelで離れた位置のAVERAGEを...
-
同一セル内の重複文字を削除し...
-
週の労働時間を計算するエクセル
おすすめ情報