• ベストアンサー

Excel、セル位置の変数化、関数作成に関する質問

Excelの関数作成に関する質問です あるセルに入力されているカンマで区切られた文字列(例:りんご,ごりら,らっぱ,ぱいん)をスプリットし、横方向のセルに出力していくという関数を考えているのですが、出力の部分がうまくいきません。 詳しい方、アドバイスをお願いします 以下、プログラムです Function test1(Ro As Integaer , Co As Integer) 'Roは参照したいセルの行数、Coには列数 Dim myData As Variant Dim i As Long Set objR = cells(Ro, Co) myData = Split(objR, ",") For i = 0 To UBound(myData) cells(Ro, Co + 1 + i) = myData(0) Next End Function

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

  • ベストアンサー
  • kazu1973
  • ベストアンサー率40% (14/35)
回答No.4

>cells(Ro, Co + 1 + i) = myData(0) →cells(Ro, Co + 1 + i) = myData(i) これだけでうまくいくような気がしますよ。

sak1982515
質問者

お礼

返答ありがとうございます もう少し勉強が必要ですね 教えていただいたものを参考にしていただき 何とか希望していたものができました ありがとうございました

その他の回答 (3)

  • okormazd
  • ベストアンサー率50% (1224/2412)
回答No.3

配列数式を忘れていました。 横に結果を入れたいセル範囲を選択して、次の関数を入れて、数式バーにカーソルを置いて、Ctrl+Shft+Enterを押してください。 function test1(rng As Range) test1 = Split(rng, ",") End Function

  • okormazd
  • ベストアンサー率50% (1224/2412)
回答No.2

もしかして、関数をどこかに1つ入れて、りんご,ごりら,らっぱ,ぱいんと横方向に出力しようと考えていませんか。 関数は普通入力されたセルに結果を返すので、それは無理です。 次の関数を入れて、横方向にドラッグしてください。 りんご,ごりら,らっぱ,ぱいんと入っているセルを参照しますが、その参照は絶対参照ですね。 Function test1(rng As Range) Dim myData As Variant Dim i As Long c = rng.Column() myData = Split(rng, ",") i = Application.ThisCell.Column() test1 = myData(i - c - 1) End Function

  • imogasi
  • ベストアンサー率27% (4737/17069)
回答No.1

例データ A列。B列以右は実行結果。 a,b,c a b c d,f,g,h d f g h A1:A2(=データのある範囲)を範囲指定して Sub test() '列数は1 Dim cl As Range Dim myData As Variant Dim i As Long Set objR = Selection For Each cl In objR myData = Split(cl, ",") For i = 0 To UBound(myData) cl.Offset(0, i + 1) = myData(i) Next Next End Sub を実行 B列以右が結果。 ーー ユーザー関数でのFunctionでは質問のようなのは出来ない。 (関数の基本的なことの理解不足) もちろんSUBの中で呼び出す、Functionならやってもよい。 多(複数)列になると、第2列以右のセルの結果を出すほうのセル範囲をどう考えるのかな。 質問でしたいことの説明もなく、実例も挙げず、良く内容がわからない。 思考も整理されて無いのでは。 ーー 上記ではSelectionを使ったが、1列だけなら、範囲指定させず、私なら、Range("A65536").End(xlUp).Rowで最下行をしり、そこまでForNext文で繰り返しをするが。

sak1982515
質問者

お礼

返答ありがとうございます EXCELもOKwaveも初心者のもので・・・ 参考にさせていただき、何とか希望していたものができました ありがとうございました

関連するQ&A