• ベストアンサー

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/17068)
回答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

  • エクセルのマクロで複数セル指定は?

    以前(7月22日 質問No.936181)の質問でご回答を頂いたマクロなんですが、 Private Sub Worksheet_Change(ByVal Target As Range) Dim MyData As String Dim i As Integer Dim ImaNanji As String Dim SakkiNanji As String Dim ImaNanpun As String Dim SakkiNanpun As String SakkiNanpun = Cells(2, 3).Value ImaNanji = Cells(1, 3).Value ImaNanpun = Mid(ImaNanji, Len(ImaNanji) - 4, 2) If ImaNanpun <> SakkiNanpun Then Application.EnableEvents = False For i = 10 To 2 Step -1 MyData = Cells(i - 1, 2).Value Cells(i, 2).Value = MyData Next i MyData = Cells(1, 1).Value Cells(1, 2).Value = MyData Cells(2, 3).Value = ImaNanpun Application.EnableEvents = True End If End Sub A1のデータをB1からB10に一分おきにつぎつぎに書き込むというものなんですが、ひとつのセルではなく複数のセル(例えばA1からA30の30個のセル)をいっぺんに書き込むようにしたいのですが可能でしょうか? よろしくお願いします。

  • エクセル 複数シート( VLOOKUP ユーザー定義関数

    複数シート(範囲)を指定できるVLOOKUP関数をユーザー定義で作りたいと思ってます。下記のコードではうまく動かないので教えてください。 Function VLOOKUPM(検索値 As Variant, 対象シート As String, 対象セル As Range, 列番号 As Integer) As Variant Dim i As Integer Dim r As Range Dim sh As Variant Application.Volatile sh = Split(対象シート, ",") For i = 0 To UBound(sh) Set r = Sheets(sh(i)).Range(対象セル) If 検索値 = r Then VLOOKUPM = r.Offset(0, 列番号) Exit Function End If Next End Function

  • エクセルマクロに関する質問

    最近、エクセルマクロを始めてたのですが、下記のような状態で困っています。 プログラムを実行した際に、Cells((I1 + I5), I6)のセルに計算式がはいって欲しいのですが、 現状では計算結果が入るだけになってしまっています。 また、単純に文字列に変換してしまうだけだと、変数が邪魔になって式になってくれません。 誰かお分かりになる方がいましたら、教えてください。  Dim I1 As Integer Dim I2 As Integer Dim I3 As Integer Dim I4 As Integer Dim I5 As Integer Dim I6 As Integer Dim I7 As Integer Dim I8 As Integer Cells((I1 + I5), I6) = Cells((I1 + I5) - 2, I6) + Cells((I1 + I5), I6 - 2) - Cells(I1 + I5, I6 - 1)

  • セル範囲を返す関数

    次のようにしますと「型が一致してません」エラーになってしまいます。 どうしたらセル範囲を返す関数が作れますか? Public Function inuinu() As Range Set inuinu = Range(Cells(1, 1), Cells(3, 3)) 'Debug.Print inuinu.Count End Function 返値にAreasの指定もしてみましたが巧くいきませんでした。

  • Excelのセルから配列変数への一括読込み

    VB(というかプログラミング)の超初心者です。 Excelシートの任意の領域にある数値を、配列変数に一括して 入力したいと思っています。 これまで、 Dim XXX(10) As Variant For I = 1 To 10 XXX(I - 1) = Cells(1, I).Value Next I Range(Cells(10, 1), Cells(10, 10)).Value = XXX の様な感じで処理していましたが(最近まで、セルへの書込みも For-Nextで処理していました)、データ数が多くなると処理に 時間がかかってしまいます。 配列YYYへの読込みもセルへの書込みの様に一括して行うには どうすれば良いでしょうか? よろしくお願いします。

  • 作成方法についての質問です。

    下記のマクロで実行すると添付画像[現状]のようになってしまいます。 私としては[こうなってほしい]の形にしたいのですが、どこに何を組み込めばよいかわかりません。 誰か教えてください。 Dim Matches As Object Dim Match As Object Dim i As Long, j As Long Dim a As Variant With CreateObject("VBScript.RegExp") Set rng = Range("A1", Cells(Rows.Count, 1).End(xlUp)) Application.ScreenUpdating = False For i = 1 To rng.Rows.Count If InStr(1, rng.Cells(i, 1).Value, "(", 1) > 0 Then .Pattern = "\(([A-z\d,]+)" Else .Pattern = "([A-z\d,]+)" End If .Global = True Set Matches = .Execute(StrConv(rng.Cells(i, 1).Value, vbNarrow)) If Matches.Count > 0 Then a = Matches(0).SubMatches(0) a = Split(a, ",") Cells(i, 2).Resize(, UBound(a) + 1).Value = a End If j = 0 Next End With Application.ScreenUpdating = True Set rng = Nothing End Sub

  • Excel : 関数内からセルを更新したい

    実行環境は Excel 2000 です。 新規ブックに、 標準モジュールを追加し、 Function Test()   Cells(2, 2) = "OK"   Test = 2 End Function という関数を追加します。 Sheet1 の、 セル「A1」に「10」を入れます。 セル「A2」に「=Test() + A1」 セル「A1」を変更すると、 関数「Test()」が呼び出されます。 このとき、コードのように、B2 のセルに「OK」を 表示させたいのですが、 「アプリケーション定義またはオブジェクト定義のエラーです。(1004)」 のエラーが発生してできません。 マクロやボタンなどのイベントプロシージャでは可能なのですが、上記のようにセルに組み込んだ関数が、 更新により実行された場合はできないのでしょうか? (Cells の指定を Workbooks(1).Worksheets(1).Cells(2, 2) としてもダメでした) (「書式」→「セル」→「保護」→「ロック」はチェックされていません) すみませんが、よろしくお願い致します。

  • エクセル2003でのマクロで質問です。

    エクセル2003でのマクロで質問です。 セル(2,22)には"1"という値が入っています。 セル(2,13)には"20100521"という値が入っています。 セル(3,13)には"20100521"という値が入っています。 セル(4.13)には"20100525"という値が入っています。 セル(5,13)には"20100525"という値が入っています。 このようなときに セル(3,22)の値は"1" セル(4,22)の値は"2" セル(5,22)の値は"2" となるように以下のようなマクロを作成しました。 Dim i As Integer, j As Integer, date1 As String i = 2 j = 3 Do While Cells(i, 1).Value <> "" If Cells(i, 13) = Cells(j, 13) Then Cells(j, 22) = Cells(i, 22) Else Cells(j, 22) = Cells(i, 22) + 1 End If i = i + 1 j = j + 1 Loop しかし、結果は セル(3,22)の値は"2" セル(4,22)の値は"3" セル(5,22)の値は"4" となってしまいます。 どこに原因があるのかわかりません。 助けてください。 宜しくお願いします。

  • エクセルVBAでセル内の特定文字列を太字に

    エクセル2003です。 A2からA100の範囲のすべてのセルに文字列(文章)が入っています。 セルにより、約30~1200文字程度とばらばらです。 この範囲の各セルの文字列の中に、「愛、恋、幸福、love」という文字列があれば、その語句だけを太字にしたいのです。 (なければ、なにもしません。) 英字(love)は半角全角大文字小文字を問いません。 一応、ここまでは書いたのですが、検索するところでお手上げになってしまいました。 なにとぞ、お助けください。 Sub Test() Dim myW Dim i As Long myW = Split("愛,恋,幸福,love", ",") For i = 2 To Cells(Rows.Count, "A").End(xlUp).Row For n = LBound(myW) To UBound(myW) MsgBox Cells(i, "A").Value & "に" & myW(n) & "があれば太字に" 'この肝心な部分がわかりません。 Next n Next i End Sub

  • 【Excel VBA】カンマ毎にデータを区切る

    はじめて質問をさせて頂きます。 Excel VBAは初心者です。 仕事で必要なため、本を読みながら考えておりましたが、 手も足も出ない状態です。 【質問内容】 Excel VBAにて、ExcelファイルのA列のみに格納されているデータを カンマ「,」の位置毎に区切ります。 ※格納されているデータ例:A,B,C,D,E Excelの区切り位置にて、カンマで区切る処理と同じです。 A1から処理を開始し、A列のデータがなくなるまで 上記の処理を行います。 下記のプログラムを実行すると、1行目は正常にカンマ毎に 区切られますが、2行目以降はカンマ毎に区切られず、 そのままの状態です。 どこに問題があり、どのように修正すれば良いのでしょうか、 ご教示頂けると助かります。宜しくお願いします。 【プログラム】 Sub カンマ毎に区切る() Dim mydata As String Dim myArray() As String Dim i, j As Integer j = 0 Do While Cells(j + 1, "A").Value <> "" mydata = Cells(j + 1, 1) myArray() = Split(mydata, ",") For i = 0 To UBound(myArray) Cells(1, i + 1).Value = myArray(i) Next j = j + 1 Loop End Sub

このQ&Aのポイント
  • 数か月ぶりに印刷しようと思ったが「印刷プレビューエラー」と表示され、ファイル選択からやり直しても同じ症状が続く。
  • Windows10を使用し、USBケーブルで接続している。
  • 関連するソフト・アプリは特にないが、電話回線はひかり回線を使用している。
回答を見る