Excelでカンマやハイフンでの区切り文字について

このQ&Aのポイント
  • ExcelでB列にカンマやハイフンで区切られた数字があり、E列に指定した数字の左からの順番を表示するにはどのような式を使用すれば良いでしょうか。
  • カンマやハイフンで区切られた数字の中で、指定した数字の左からの順番を求める方法について教えてください。
  • ExcelのB列にはカンマやハイフンで区切られた数字がありますが、指定した数字の左からの順番を求めるにはどうすればよいですか。
回答を見る
  • ベストアンサー

Excelでカンマやハイフンでの区切り文字について

例えば下の画像のようにB列に、「,」、「-」、「=」で区切られた数字があります。 E列にセル「E1」で指定した数字が、左から何番目にあるかを表示するにはどういった式を書けばよろしいでしょうか。 例えば、画像ではB2では、「10」は左から4番目にあるので、E2は「4」と出るようにしたいのです。 ここで問題は、()で囲まれている箇所は同順という事になります。 なので、B3では「10」は()内にあるので左から2番目になります。括弧以外は順番通りです。 数字は必ず1~18の2桁の間になります。作業列も可です。 B列に文字列を貼り付けると自動で指定した数字の左からの順番が出るようにしたいので、アドバイスよろしくお願いしますm(_ _)m 画像 ttp://www.poverty.jeez.jp/ura/img/kenmou01024.png

  • mzakom
  • お礼率38% (129/338)

質問者が選んだベストアンサー

  • ベストアンサー
回答No.3

No.2 です。すみません、No.2 のコードでは、文字列中で「指定」した数よりも前と後ろにそれぞれ ( ) が登場する場合に、正しく計算できないことが分かりました。下のコードに差替えをお願いいたします。 変更点は、変数 y をなくして y1 と y2 を設置し、「If x > 1 Then」以下を少し修正しました。 なおこのコードであっても、「二重の」( ) には対応していません。1,((2,3),4),5 などのことです。 Function OON(ByVal s1 As String, ByVal s2 As String)   Dim s3 As String, s4 As String, x As Integer, y1 As Integer, y2 As Integer, z As Integer   s3 = Replace(Replace(s1, "-", ","), "=", ",")   If s3 = s2 Or s3 Like s2 & ",*" Then     x = 1   ElseIf s3 Like "*," & s2 & ",*" Then     x = InStr(1, s3, "," & s2 & ",") + 1   ElseIf s3 Like "*(" & s2 & ",*" Then     x = InStr(1, s3, "(" & s2 & ",") + 1   ElseIf s3 Like "*," & s2 & ")*" Then     x = InStr(1, s3, "," & s2 & ")") + 1   ElseIf s3 Like "*," & s2 Then     x = Len(s3) - Len(s2) + 1   Else     x = 0   End If   If x > 1 Then     y1 = InStrRev(s3, "(", x)     y2 = InStrRev(s3, ")", x)     z = InStr(x, s3, ")")     If y1 > y2 And z > 0 Then       s4 = Left(s3, y1)     Else       s4 = Left(s3, x)     End If     OON = Len(s4) - Len(Replace(s4, ",", "")) + 1   Else     OON = x   End If End Function

mzakom
質問者

お礼

おお!思ってた通りの事が見事にできました。素晴らしい回答ありがとうございます。 ユーザー関数の仕組みは私の知識ではまだ理解出来ないですが、後学のために参考にさせて貰います。 ありがとうございましたm(_ _)m

その他の回答 (3)

  • bunjii
  • ベストアンサー率43% (3589/8248)
回答No.4

>数字は必ず1~18の2桁の間になります。作業列も可です。 作業用のシートを使うと目的通りに処理できそうです。 添付画像は1つの例です。 詳しい説明が必要であれば補足してください。

mzakom
質問者

お礼

画像付きでわかりやすい回答ありがとうございます。 今後の参考にさせて貰いますm(_ _)m

回答No.2

( ) がなければ、易しくないながらもまあできますが、例えば「3」と指定して「13」の位置で引っかかったりするとダメなので、前後の「,」を含めて位置を検索するといった工夫が必要でしょう。 ( ) があるとなると、( ) の位置やその間に含まれる数の個数が一定していないので、ものすごく長大・難解な数式が必要になってしまいそうです。 なので、ユーザー定義関数を作ってしまいましょう。下のコードを標準モジュールなどに貼り付けたら、次式をセルに記入してください。これで大体うまく行ってないでしょうか。 E2 =oon(b2,E$1) Function OON(ByVal s1 As String, ByVal s2 As String)   Dim s3 As String, s4 As String, x As Integer, y As Integer, z As Integer   s3 = Replace(Replace(s1, "-", ","), "=", ",")   If s3 = s2 Or s3 Like s2 & ",*" Then     x = 1   ElseIf s3 Like "*," & s2 & ",*" Then     x = InStr(1, s3, "," & s2 & ",") + 1   ElseIf s3 Like "*(" & s2 & ",*" Then     x = InStr(1, s3, "(" & s2 & ",") + 1   ElseIf s3 Like "*," & s2 & ")*" Then     x = InStr(1, s3, "," & s2 & ")") + 1   ElseIf s3 Like "*," & s2 Then     x = Len(s3) - Len(s2) + 1   Else     x = 0   End If   If x > 1 Then     y = InStrRev(s3, "(", x)     z = InStr(x, s3, ")")     If y * z Then       s4 = Left(s3, y)     Else       s4 = Left(s3, x)     End If     OON = Len(s4) - Len(Replace(s4, ",", "")) + 1   Else     OON = x   End If End Function

  • mayoke
  • ベストアンサー率25% (16/62)
回答No.1

FIND関数で開始位置(X)を特定して、 1文字目からX文字目までの文字数から 1文字目からX文字目までのデリミタ(,等)を消した文字数を差し引けば出るんじゃない? (E2セルの場合) =LEN(LEFT(B2,FIND($E$1,B2)))-LEN(SUBSTITUTE(LEFT(B2,FIND($E$1,B2)),",",""))+1 あとはハンドリングの調整が必要かな。 (該当文字が無い場合や1つ目の時の動きなど) 参考までに。

mzakom
質問者

補足

回答ありがとうございます。 SUBSTITUTE関数は勉強になりました。おかげで、ハイフンやカンマ等を削除して順番が出せました。 しかし、()内の同順判定の方法で躓いています(^^;) ちなみに指定した数字が「該当なし」というのは存在しないので大丈夫です。

関連するQ&A

  • ExcelのVBAに詳しい人に質問です

    下記のURL画像のような表があります。 http://www.poverty.jeez.jp/ura/img/kenmou01000.png A列に入っている1~62までの文字(画像ではわかりやすく数字にしています。)を、右の表の番号をふっている箇所に順番通りに挿入するVBAを組みたいのですが、どのような書き方が1番効率的なのでしょうか。 例えば、一つ一つやるなら62列も一々打つことになるので手間がかかってしまいます(;´Д`) Range("B5").Value = Range("A1").Value Range("C5").Value = Range("A2").Value Range("D5").Value = Range("A3").Value 何か良い方法はありますでしょうか。数学が出来ない馬鹿な私にアドバイスよろしくお願いしますm(_ _)m

  • Excelでハイフンが入った文字列の抽出について

    A列に『12-1』、『1-5-10』、『14-15-6-3』など1桁また2桁の数字がハイフンで区切られた文字列があるとします。 そこからB列には左から2番目の数字、C列には右から2番目の数字、D列には1番右端の数字を関数で抽出したいのですが、出来ないでしょうか。 全部半角で、必ず数字は二つ以上あり、桁数は2桁までです。下記の画像のようにしたいです。 http://uproda.2ch-library.com/801593yFu/lib801593.jpg

  • 行にある文字をカンマ区切りでひとつのセルに

    エクセルで次のようなデータがあります "a","b","c","d" "1","","3","4" "1","2","","4" "","2","3","4" このデータに対して 2行目から4行目のe列に その行に入っている数字をカンマ区切りで表示させたい 下記のイメージです "a","b","c","d","e" "1","","3","4","1,3,4" "1","2","","4","1,2,4" "","2","3","","2,3" ダブルコーテーションマーク"はついていませんが 質問時、表が崩れるのでこれをつけさせてもらいました 上記のイメージですがデータ的には 900行、50列ほどあります 関数かVBAでやれる方法を教えていただきたいのですが・・・ 関数・VBAについては昔やったことがある程度です 時間をかけて何かをみながら・・・やれる程度のものです ヒント等いただければ幸いです

  • エクセルでの文字の並び替え

    本当に初歩的な質問だと思うのですが、どうかお答え下さい。 エクセルである数字がA列とB列に入っているとして、C列に順番にA1、B1、A2、B2、・・・という風に自動で出力させるにはどの様にすればよいのですか?

  • EXCELでの参照

    1つ目のデータ…A列に名前 B列に数字 2つ目のデータ…D列に名前 E列に数字 1つ目と2つ目のデータを比較した場合 A列の名前からD列の名前と同じものを選び出して その隣にある数字に関して以下の様にしたい場合 ・同じ数字だった場合、F列に0もしくは空欄 ・違う数字だった場合、F列にEの数引くBの数 を反映させたいです。どうしたらいいでしょうか? (名前の並んでいる順番はAとD列では揃っていない場合)

  • vba split関数 コンマ区切り

    エクセル・vbaに不慣れなためわかりづらかったら申し訳ありません。 コンマ区切りの数字をsplit関数で分割して指定セルに表示したいと考えており、以前質問し回答をいただいた内容でやりたいことが出来るようになりました。 ただし、若干出力場所等の変更を行いたいのですが、変更することが出来ません。 以前はA~C列にあるものをE~H列・J~M列・O~R列に表示する。 その際、A~C列にあるコンマ区切りの数字は3つのものと4つのものがあります。画像の上段部分をご確認ください。 その際のマクロは下記のとおりです。 Sub Test() Dim i As Long, j As Long, k As Long Dim tmp As Variant For i = 1 To 3 For j = 3 To 11 tmp = Split(Cells(j, i).Value, ",") For k = 0 To UBound(tmp) If k < 4 Then Cells(j, i).Offset(0, i * 4 + k).Value = tmp(k) End If Next Next Next End Sub 変更したいのは、AC8~AE16にコンマ区切りの数字があります。 AC列にある数字はAI8~AL16にAD列にある数字はAS8~AV16に AE列にある数字はBC8~BF16に表示したいと考えています。 コンマ区切りの数字は3つのものと4つのものがあります。 (画像の下段部分をご確認ください。) 上記のマクロでは下記の部分を変更する必要なのかと考えていますが、変更方法がわかりません。 お分かりの方教えていただけたら幸いです。 どうぞよろしくお願いいたします。 For k = 0 To UBound(tmp) If k < 4 Then Cells(j, i).Offset(0, i * 4 + k).Value = tmp(k)

  • excel 2つの条件

       A   B  1  3  22 2  4  15 3  2  10 4  4  10 のような表があったとします。 A列で1番目に大きくてB列が大きい数字を求めたい(答えB2の15) 同じように A列で2番目に大きくてB列が大きい数字を求めたい(答えB4の10) 同じように A列で3番目に大きくてB列が大きい数字を求めたい(答えB1の22) 文がわかりにくいと思いますが、汲み取ってください。 わかる方よろしくお願いします。

  • vba split関数 コンマ区切り

    エクセルに不慣れなため教えていただけたら幸いです。 A3~A11・B3~B11・C3~C11列にコンマ区切りの数字があります。 列によってはコンマで区切られた数字が3つのものと4つのものが混在しています。 split関数でコンマ区切りの数字を分割してE~H列・J~M列・O~R列に表示したいと考えています。 先ほど別の質問で下記のマクロを教えていただいたのですが、 その際は、A1~A9にあるものをD~G列に表示するというものでした。 よくよく考えると、A列のみではなく、B・C列と複数の列を コンマ区切りしたいと考えています。 このような場合は、どうしたらよいでしょうか。 vba不慣れなためわかりづらかったら申し訳ありません。 お分かりになられるかたがいらっしゃいましたら教えていただけますでしょうか。 よろしくお願いいたします。 Option Explicit ' Sub Macro1()   Dim Rout As Long   Dim Colu As Integer   Dim Expression As Variant '   For Rout = 1 To Cells(Rows.Count, "A").End(xlUp).Row     Expression = Cells(Rout, "A")     Expression = Split(Expression, ",") '     For Colu = 0 To UBound(Expression)       Cells(Rout, Colu + 4) = Expression(Colu)   Next Colu, Rout End Sub

  • ・エクセルで特定の条件に合う文字列を抜き出す方法を教えて

    ・エクセルで特定の条件に合う文字列を抜き出す方法を教えて 例のようにA列の文字の中からカッコ内(4桁数字“ハイフン”7桁数字)を B列に表示するにはどうしたらよいでしょうか。 ちょっと面倒なのはカッコは複数ある場合があり(xxxx-xxxxxxx)の条件に 合ったものだけを隣のセルに表示したいのです。 カッコとカッコ内は半角でxは不特定な数字です。 (例) A1=あいうえお(abcde)かきくけこ(xxxx-xxxxxxx)さしすせそ B1=xxxx-xxxxxxx よろしくお願いいたします。

  • エクセル・入力文字の結合操作

    エクセルで、A列とB列に数字が入力されています。 A列に入力されている1セルの数字にB列のセルに入力してある数字を順番に別シートに結合させて転記していきたいのですが方法がわかりません。 例として・・・ (A列)  (B列)    1000    33  2000    44  3000     ↓ 5000 別シートに・・・ (A列)  100033 100044 200033 200044 300033 300044 ↓ 500033 500044 よい方法をご存知の方がいらっしゃいましたら、教えてください。宜しくお願いします。

専門家に質問してみよう