- ベストアンサー
エクセルでハイフンで示した数値の範囲を別々の数値へ
エクセルでハイフンで示した数値の範囲を別々の数値へ変換したいのですが、行う方法はありますでしょうか。 例:1-5 → 1,2,3,4,5 といった感じです。 なお、実際のセルでは 1,3,6-9,11,14,15-18 といった感じで、範囲と普通の区切りが混在しております。 エクセルで行わなくともソフトウェア等で変換後にエクセルに貼り付けられれば問題ありません。 ご教授のほどよろしくお願いいたします。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
かなり手抜きではありますが、ユーザ定義関数を作ってみました。 以下のコードを標準モジュールに入れ、適当なセルに =fSample(A1) の様に入れて下さい。 #この例でのA1セルは変換対象の文字列が入っているセルです。 Function fSample(sData As String) As String sOne = Split(sData, ",") For i = 0 To UBound(sOne) If InStr(sOne(i), "-") > 0 Then sWork = Split(sOne(i), "-") sOne(i) = sWork(0) For j = Int(sWork(0)) + 1 To Int(sWork(1)) sOne(i) = sOne(i) & "," & j Next j End If fSample = fSample & "," & sOne(i) Next i fSample = Right(fSample, Len(fSample) - 1) End Function
その他の回答 (1)
- KURUMITO
- ベストアンサー率42% (1835/4283)
次のようにしてもよいでしょう。 例えばA1お示しのようなデータが入力されているとします。 A1セルを選択してから「データ」タブの「区切り位置」を選択します。 「カンマやタブなどで区切られた・・・・」にチェックを付けて「次へ」、「カンマ」にチェックをしてから「次へ」、「表示先」が$A$1になっているところを$C$1に変更して「完了」します。 C1セルからお示しのケースですとH1セルまでにデータが表示されます。ここではM1セルまでにデータが表示されることも考えて次のようにします。 C2セルには次の式を入力してM2セルまでドラッグコピーしたのちに下方にもドラッグコピーします。例えば10行まで下方に、 =IF(AND(COUNT(C$1)>0,C$1<41000),"",IF(AND(C$1>41000,COUNTIF(C$1,"*-*")=0),IF(ROW(A1)<=DAY(C$1)-MONTH(C$1)+1,MONTH(C$1)+ROW(A1)-1,""),IF(COUNTIF(C$1,"*-*")>0,IF(ROW(A1)<=MID(C$1,FIND("-",C$1)+1,3)*1-LEFT(C$1,FIND("-",C$1)-1)*1+1,LEFT(C$1,FIND("-",C$1)-1)*1+ROW(A1)-1,""),""))) その後にN1セルには次の式を入力して右横方向にドラッグコピーします。 =IF(COLUMN(A1)>COUNTIF($C:$M,">0")-COUNTIF($C:$M,">41000"),"",IF(COLUMN(A1)=1,SMALL($C:$M,COLUMN(A1)),M1&","&SMALL($C:$M,COLUMN(A1)))) その後にB1セルには次の式を入力します。 =INDEX(N1:XX1,COUNTIF(N1:XX1,"*?")+1) これでB1セルにはお求めのデータが表示されます。
お礼
遅くなりましたが、ありがとうございました。
お礼
遅くなりましたが、ありがとうございました。