おせわになっています
AM23156
AB01567
C155901
M556348
BD65478
このような文字列データがあるのですが
先頭がアルファベット1文字の場合その文字のみを
アルファベット2文字の場合その2文字を切り出したいのです
C155901の場合「C」のみを取り出す
AM23156の場合「AM」を取り出す
このようにする関数を教えて下さい
LEFT関数で取り出すのまではわかるのですが
その後をどのようにするのか
見当がつきません
win XP エクセル2003
No.1
- 回答日時:
VBAで実現するなら以下のマクロになります。
ユーザ定義関数にしましたので=AZout(A1)
のように入力すれば、先頭の全角英文字列のみを抽出します。
マクロはALT+F11でVBE画面を開き、「VBAProjectエクスプローラのシート名右クリック」→「挿入」→「標準モジュール」で表示される画面にペーストして下さい。
Function AZout(ByVal Target As Range) As String
Dim RE, strPattern, repPattarn, trgStr As String
Dim mchItem
Set RE = CreateObject("VBScript.RegExp")
strPattern = "^[A-Z,a-z]+"
On Error Resume Next
With RE
.Pattern = strPattern ''検索パターンを設定
.IgnoreCase = True ''大文字と小文字を区別しない
.Global = True ''文字列全体を検索
Set mchItem = .Execute(Target.Value)
If mchItem.Count > 0 Then
AZout = mchItem(0).Value
End If
End With
Set RE = Nothing
End Function
この回答への補足
早速ありがとうございます
好意に甘えついでに、質問させてください
>先頭の全角英文字列のみを抽出します。
半角英文字列や全角と半角が混ざっている文字列の場合
どの部分を修正すればよいのでしょうか
また既存の関数式を使用する場合とでは切り出す処理速度は変わらないのでしょうか
なにぶん、データ行が数1000行あるもので心配です
初歩的な質問ですみません
No.2
- 回答日時:
#01です。
先頭の全角、半角混在文字列を抽出するようにしました。 関数名は AZout2 に変更しています。
>既存の関数式を使用する場合
とはどのような意味か十分には理解できていませんが、私のPC環境では1250行を一括で処理して再計算に10秒くらいかかりました。目安にして下さい。
Function AZout2(ByVal Target As Range) As String
Dim RE, strPattern, repPattarn, trgStr As String
Dim mchItem
Set RE = CreateObject("VBScript.RegExp")
strPattern = "^[A-Z,A-Z]+"
On Error Resume Next
With RE
.Pattern = strPattern
.IgnoreCase = True
.Global = True
Set mchItem = .Execute(Target.Value)
If mchItem.Count > 0 Then
AZout2 = mchItem(0).Value
End If
End With
Set RE = Nothing
End Function
ありがとうございます。
上記のマクロをコピー・ペーストして =AZout2(A1)
で関数として使用してみたのですが、
#NAME?になって思い通りに結果が出ません
どこがわるいのでしょうか
申し訳ありません助けてください
それと
>既存の関数式を使用する場合 ではなく
>既存の関数式を駆使して使用する場合 です
文字列関数とIFやANDなどを駆使してと言うことで・・・・
説明不足ですみません
No.4ベストアンサー
- 回答日時:
#3>単にA1にあるデータがそのまま表示されるだけです。
A1にある数字が半角なら
=LEFT(A1,MIN(FIND({"0","1","2","3","4","5","6","7","8","9"},A1&"0123456789"))-1)
としてみて下さい。
ありがとうございました
出来ました。
質問させてください
この配列関数をコピーするにはどうすればよかたでしょうか
何か約束事があったような気がするのですが
よろしくお願いします。
No.5
- 回答日時:
#4>この配列関数をコピーするにはどうすればよかったでしょうか
この場合、普通にコピーすればいいです。
この回答への補足
すみませんでした
私のエクセルがどうしたことかオプションの計算方法が手動になっていました
再計算を自動にすれば解決しました
しかしなぜ手動になったのか不思議です。
ありがとうございました
>この場合、普通にコピーすればいいです。
わたしのPCでは、下の行にドラッグしてコピーしたのですが
数式は相対的に変更されているにも関わらず
表示はA1セルを参照したままです。
当該セルを一度編集状態にして「ENTER」を押すと正常な表示になりますが、
時間が掛かってしかたがありません
AA123456 AA
AB236547 AA
a0654782 AA
:
:
AA123456 AA
AB236547 AB <--このセルを編集後ENTERで直る
a0654782 AA
このような状態です。
どうすれば直るのか教えてくださいお願いいたします
No.6
- 回答日時:
#01です
>#NAME?になって思い通りに結果が出ません
そうですか。私の環境では動きましたが…
#01と#02の変更点は以下の1行のみです。
strPattern = "^[A-Z,A-Z]+"
この行だけ差し替えて下さい
面倒な事ばかりで申し訳ありません
新規Bookでコピー・ペーストしてみたのですが
今度は、エラーではなく結果は空白になってしまいました。
編集画面は確かに”=AZout(A1)”などとなっていますが肝心のセルは空白になっています
原因がわかりません
もし時間があれば教えてください
No.7
- 回答日時:
#01です。
先頭に英文字(全角半角混在可、大文字小文字混在可)以外の文字が入っていると結果は空白になりますが、そんなことはありませんか?確認のため =AZout(A1) を入力したときに、必ず何らかの文字列が返るようにしてみました。これでも空白の結果になるようなら、ユーザ関数が起動されていない可能性が高いです。
その時はマクロを一旦全部削除してもう一度ペーストした上で、再度ユーザ関数式を入力してみてください。
Function AZout(ByVal Target As Range) As String
Dim RE, strPattern, repPattarn, trgStr As String
Dim mchItem
Set RE = CreateObject("VBScript.RegExp")
strPattern = "^[A-Z,A-Z]+"
On Error Resume Next
With RE
.Pattern = strPattern ''検索パターンを設定
.IgnoreCase = True ''大文字と小文字を区別しない
.Global = True ''文字列全体を検索
Set mchItem = .Execute(Target.Value)
If mchItem.Count > 0 Then
AZout = mchItem(0).Value
Else '確認用に行追加
AZout = "×Not hit" '確認用に行追加
End If
End With
Set RE = Nothing
End Function
原因が判明したら
Else
AZout = "×Not hit"
の二行は削除してください。
お礼が遅れて申し訳ありませんでした
もう一度チャレンジしてみます。
勉強のため構文を確認しながら実行してみます
ありがとうございました
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・人生のプチ美学を教えてください!!
- ・10秒目をつむったら…
- ・あなたの習慣について教えてください!!
- ・牛、豚、鶏、どれか一つ食べられなくなるとしたら?
- ・【大喜利】【投稿~9/18】 おとぎ話『桃太郎』の知られざるエピソード
- ・街中で見かけて「グッときた人」の思い出
- ・「一気に最後まで読んだ」本、教えて下さい!
- ・幼稚園時代「何組」でしたか?
- ・激凹みから立ち直る方法
- ・1つだけ過去を変えられるとしたら?
- ・【あるあるbot連動企画】あるあるbotに投稿したけど採用されなかったあるある募集
- ・【あるあるbot連動企画】フォロワー20万人のアカウントであなたのあるあるを披露してみませんか?
- ・映画のエンドロール観る派?観ない派?
- ・海外旅行から帰ってきたら、まず何を食べる?
- ・誕生日にもらった意外なもの
- ・天使と悪魔選手権
- ・ちょっと先の未来クイズ第2問
- ・【大喜利】【投稿~9/7】 ロボットの住む世界で流行ってる罰ゲームとは?
- ・推しミネラルウォーターはありますか?
- ・都道府県穴埋めゲーム
- ・この人頭いいなと思ったエピソード
- ・準・究極の選択
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
エクセル文字列で縦書きカタカ...
-
「キャンディ」
-
3種類の円マークの違い
-
製品登録が出来ない!!
-
エクセルとアクセスでローマ数...
-
2週間ほど前からtokyomotionと...
-
マイページの出し方が分かりま...
-
ワードで直径4cmの円を作成...
-
Google Chrome インターネット...
-
PCのグーグルマップで現在地が...
-
メールソフト「Thunderbird」で...
-
ワードで作った文章を筆ぐるめ2...
-
リンクに飛べる様にする際 「C...
-
Google Chrome Portable
-
ワードのハイパーリンク、Ctrl...
-
E-mailの署名について
-
Windows Defender Scheuled Sca...
-
アイコンに、四角い枠が出来て...
-
PC上からメールのアイコンが消えた
-
パソコンの画面が上半分だけし...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
おすすめ情報