- ベストアンサー
Excel(文字列操作)についての質問です。
今、Excelで、最初の文字とアンダースコアのあとの文字を取り出す方法を考えています。 (例:ABC_DEF_GHI→ADG) しかし、アンダースコアが何個あるかわかりません。 現在、A1セルに、ABC_DEF_GHIと入力されているとき、 =LEFT(A1,1) & MID(A1,FIND("_",A1,1)+1,1) & MID(A1,FIND("_",A1,FIND("_",A1,1)+1)+1,1)・・・・・ と入力すると取得は出来るのですが、アンダースコアの数が変更になると対応できません。 関数、VBAどちらでも結構ですので、よろしくお願いいたします。
- a04sa026
- お礼率19% (13/67)
- オフィス系ソフト
- 回答数7
- ありがとう数1
- みんなの回答 (7)
- 専門家の回答
質問者が選んだベストアンサー
みなさんがどうしてそんなに難しく書くのかなぞですが。 data="ABC_DEF_GH・・・・"'アンダーバーで区切られたデータ spd=split(data,"_") for i = 0 to ubound(dpd) ans = ans =left(dpd(i),1) next ansが答えです。これだけでよいかと思います。 短いの説明するまでもないですが処理を説明します。 splitでデータを_区切りで配列化します。これでいくつあるのかも同時に分かります。なぜなら配列数はuboundで取得できるからです。 あとはその配列分forでまわすだけです。 回す際にleftで左から一文字だけを取りそれをansに配列の数だけ連結し続けます。 これで「最初の文字とアンダースコアのあとの文字を取り出す」の処理はおしまいです。どうでしょうか?ね、簡単でしょ? 処理違いや補足・修正が欲しい場合言ってください。書き直します。
その他の回答 (6)
- argument
- ベストアンサー率63% (21/33)
さらみで確認怠りましたorzめっさ被ってますねOTL。 という訳で他の方法です。正規表現で置換を行います。 下記を実行すれば頭順にabcdefが返るはずです。 Sub saasen() a = "ab_bdfa_cdas_ddse_esdd_fsda" '_区切りデータ Set re = CreateObject("VBScript.RegExp") re.Pattern = "_." '検索する正規表現パターン re.Global = True '検索範囲はグローバル re.IgnoreCase = True '大文字・小文字を区別する Set Matches = re.Execute(a) For Each Match In Matches ans = ans & Match.Value Next Match re.Pattern = "_" MsgBox re.Replace(Left(a, 1) & ans, "") End Sub これで勘弁( 人 )
- 米沢 栄蔵(@YON56)
- ベストアンサー率36% (37/102)
XXという名前のシートにおいて、セルA1にABC_DEF_GHIというデータが入力され、Enterキーが押されれば、自動的にお望みの結果を得るマクロを書きます。 この記述は、Microsoft Excel ObjectsのXXシートに書きます。 Private Sub Worksheet_Change(ByVal Target As Range) Dim A,B,C,D Dim AA,BB,CC A=Target.Row B =Target.Column If A=1 and B=1 Then AA = Cells(A,B).Value C=Len(AA)-Len(Replace(AA,"_","")) BB=AA CC="" For B=1 To C CC=CC&Left(BB,1) BB=Right(BB,Len(BB)-Instr(BB,"_")) Next B End If End Sub
》 アンダースコアが何個あるかわかりません 最大5個と仮定して、そのようなデータが Sheet1 のA列にあるとします。 1.Sheet2 のセル A1 に次式を入力して、此れを下方にズズーッと ドラッグ&ペースト =LEFT(Sheet1!A1,1)&LEFT(Sheet1!B1,1)&LEFT(Sheet1!C1,1)&LEFT(Sheet1!D1,1)&LEFT(Sheet1!E1,1)&LEFT(Sheet1!F1,1) 2.Sheet1 のA列を選択 3.[データ]→[区切り位置]を実行 4.“カンマやタブなどの・・・区切られたデータ”に目玉を入れて [次へ]をクリック 5.“その他”の右側のボックス内にアンダースコア(_)を入力して [完了]をクリック したら、Sheet2 のA列はどうなりますか?
- KenKen_SP
- ベストアンサー率62% (785/1258)
こんにちは。 Split で区切り文字 "_" で配列にばらし、各要素の初めの一文字を 連結すれば良いと思いますよ。こんな感じの関数を書いて、 Public Function CS(ByVal Source As Variant) Dim v As Variant Dim s As String For Each v In Split(Source, "_") s = s & Left$(v, 1) Next CS = s End Function ワークシートで数式 =CS(A1) とか。 Split は Excel2000 以降限定になりますけど、そろそろ問題ないの ではないかと...
- mitarashi
- ベストアンサー率59% (574/965)
ユーザー定義関数で、こんなのではいかがでしょうか。 Function test(target As String) Dim buf As Variant Dim buf2 As String Dim i As Long buf = Split(target, "_") For i = 0 To UBound(buf) buf2 = buf2 & Left(buf(i), 1) Next i test = buf2 End Function
- n-jun
- ベストアンサー率33% (959/2873)
Sub サンプル() Dim c, v, st As String Dim match, matches v = Array("ABC_DEF_GHI", _ "ABC_DEF_GHI_ABC_DEF_GHI") With CreateObject("VBScript.RegExp") .Pattern = "\_\w{1}" .Global = True For Each c In v If .TEST(c) Then st = Left(c, 1) Set matches = .Execute(c) For Each match In matches st = st & Replace(match.Value, "_", "") Next MsgBox st st = "" End If Next End With End Sub こうゆう事でしょうか?
関連するQ&A
- エクセル関数:右側の文字列を抜き出す方法
エクセル初心者です。 文字列の抜き出す方法で悩んでいます。 たとえば、A1~A5までに下のような 文字列が順に入っているとします。 C:\abc\TEST1.DOC C:\abc\def\TEST2.DOC C:\abc\def\ghi\jkl\TEST3.DOC C:\abc\def\ghi\TEST4.DOC C:\abc\def\TEST5.DOC これらの文字列の一番右側の'\'以降の文字列 (TEST1~5.DOC)を、B1~B5のセルに 出したいと思っているんですが できるのでしょうか? RIGHT関数や、LEN関数、FIND関数を使って できそうな気がするのですが どうも良い方法が思いつきません。 よろしくお願いします。
- ベストアンサー
- オフィス系ソフト
- エクセル:特定の文字を含むセルの数を数えたい。
たとえば表のある列に「○ABC」、「DEF○」、「GHI×」とあったときに 「○」を含むセルの数を数えたいんですが、どのようにしたらいいですか? セル内の文字列が「○」だけだったらcountif関数が使えますよね。 上のように「○」に「ABC」とか余分な文字列がくっついてるのでどうしたら いいかわからないんです。 よろしくお願いします。
- ベストアンサー
- オフィス系ソフト
- Excellで一つのセル内で改行する文字コードを関数で入力
例えば セルA1に「あいう・abc」と入力します。そこにsubstitute関数かなんかで (replaceかな)"う"と"a"の間にchar(11)かなんかをいれて 「あいう abc 」 と表示させたいのです。 どーしてもうまくいかなくて、いまはfind関数とmid関数で表示しています。 なんとか ならないのでしょうか? なんだか 文字列だどか数字だとかややっこしいくって こまってます よろしくお願いします。
- ベストアンサー
- オフィス系ソフト
- エクセルの文字列操作
住所録の様式で A列にNo、B列に氏名、C列に住所のファイルがあり、 C列の住所で、1個のセルに何故かしら「住所と電話番号」が入っています。 住所と電話番号を夫々別の列に分割したくて、 電話番号は、RIGHT 関数で取り出しました。 住所は、文字数が一定でないので、LEFTまたはMID関数では出来ません。 ここで質問です 住所データの末尾に混在する電話番号は10文字の場合に限定し、 文字数の異なる、住所(○○市XX町△△番地○△荘2-103など)のみ 抽出する方法はありませんか。 なお、VBAなどは無知です、エクセル関数だけの操作があれば教えてください。
- ベストアンサー
- その他(PCパーツ・周辺機器)
- エクセル関数:文字の抜き出し方について
どなたかお力添えください。 セルA1に「1234:567:89abc:de」があります。ここからセルB1に「1234」だけを、セルC1に「567」だけをセルD1に「89abc」だけをセルE1に「de」だけを抜き出したいと思っています。「FIND」関数では1番左の「:」しかカウントしてくれないため、苦労しています。 やはり「LEFT(FIND)」で左から「1234」を抜き出し、残り「567:89abc:de」を別の列のセル(たとえばセルAA1)に表示し、また「LEFT(FIND)」で左から「567」を抜き出し、・・・を繰り返すしかないでしょうか。 セルC1・D1・E1とも、1式でセルA1から直接抜き出す方法はないでしょうか。 ご存じの方、お力添えください!!
- 締切済み
- その他MS Office製品
- 文字列を配列にしたい
お世話になります。 PHP4.3.9を利用しているのですが、以下のような文字列を分割して、求める形の配列に入れたいのですが、何か良い方法はありますでしょうか? ■文字列 abc=123&def=456&ghi=789 ■このような形にしたいと思っています↓ $hoge = array( "abc"=>"123", "def"=>"456", "ghi"=>"789" ) ヒントだけでも結構ですので、ご教示いただけると幸いです。宜しくお願いします。
- ベストアンサー
- PHP
- エクセルの文字列操作について
セルA1に123、セルA2に12と入力があった場合、 セルB1にはセルA1の12を、セルB2にはセルA2の1を 表示させたいのですが、 一つの関数でできますか? 文字列操作の関数では見当たらなかったのですが。
- ベストアンサー
- オフィス系ソフト
- Excel オートフィルタ
こんばんわ。 教えていただきたいのですが、excelのオートフィルタの各項目のフィルタをクリックすると登録してあるものが自動的に表示されるようにしたいのです。 A1のセルにABC A2のセルにDEF A3のセルにGHIと入力をします。 このA1~A3までの行をすべて非表示にします。 A4以降のセルはすでに何かが入力されています。 A4以降にオートフィルタを設定してA4のセルをクリックするとABC、DEF,GHIとクリックすると入力できるようにしたいのですが・・。 説明がうまくない本当に申し訳ありませんが、アドバイスをお願いいたします。
- ベストアンサー
- オフィス系ソフト
- Excelでの文字列の結合
Excelで文字列を結合したいのですが、可能でしょうか? 例えば、セルA1に「abc」、セルB1に「def」と入力し、 それをセルC1に「abcdef」と表示させたいのです。 方法がわからなかったので、 一度txtファイルに変換して保存し、 表示する時にスペースで区切らないようにし表示させたのですが、 うまくいきません。 表示は「abcdef」とキレイに表示されるのですが、 検索コマンドで「abcdef」と入力しても検索されません。 ですので、VLOOKUPなどの関数が使用出来なくて困っています。 どのようにすればいいのでしょうか? よろしくお願いします。
- ベストアンサー
- オフィス系ソフト