牛、豚、鶏、どれか一つ食べられなくなるとしたら?

エクセルでハイフンで示した数値の範囲を別々の数値へ変換したいのですが、行う方法はありますでしょうか。

例:1-5 → 1,2,3,4,5

といった感じです。

なお、実際のセルでは
1,3,6-9,11,14,15-18
といった感じで、範囲と普通の区切りが混在しております。

エクセルで行わなくともソフトウェア等で変換後にエクセルに貼り付けられれば問題ありません。
ご教授のほどよろしくお願いいたします。

A 回答 (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
    • good
    • 1
この回答へのお礼

遅くなりましたが、ありがとうございました。

お礼日時:2013/10/10 14:40

次のようにしてもよいでしょう。


例えば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セルにはお求めのデータが表示されます。
    • good
    • 0
この回答へのお礼

遅くなりましたが、ありがとうございました。

お礼日時:2013/10/10 14:40

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!


おすすめ情報