こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

VBA Splitで「引数の数が一致していません。

 今日は、質問させていただきます。どうぞよろしくお願いいたします。

 Excel2007でございます。
A列に
13.3483288757881 9.55166445333847 24.8030876776544
17.7550944828646 9.55166445333847 24.8030876776544
8.9415632687115 13.9584300604151 24.8030876776544
 :
 :
といった数字(空白2つで3つに別れております)が入っております。
これを空白でSplitして、それぞれをB,C,D列に入れたい次第でございます。
    B               C               D
13.3483288757881     9.55166445333847     24.8030876776544
17.7550944828646     9.55166445333847     24.8030876776544
8.9415632687115     13.9584300604151     24.8030876776544
のような感じでございます。


 そこでVBAで
Sub Split()
Application.ScreenUpdating = False
With ThisWorkbook.Worksheets(1)
  Do
    行 = 行 + 1
    temp = Split(.Cells(行, 1), " ")
    For 列 = LBound(temp) To UBound(temp)
      .Cells(行, 列 + 1) = temp(列)
    Next
  Loop While .Cells(行, 1) <> ""
End With
Application.WorksheetFunction = True
End Sub
といたしましたところ、「コンパイルエラー: 引数の数が一致していません。または不正なプロパティを指定しています。」とエラーメッセージが出てしまいます。
 ネット上を検索いたしましたが、引数の数には問題ないようですので、
試しにtemp = Split(.Cells(行, 1), " ") → temp = Split(.Str(Cells(行, 1)), " ")
などと変更いたしましても同じエラーが出てまいります。

 もし何か怪しそうな箇所を思いつかれる方がいらっしゃいましたら、是非アドバイス頂きたくお願いいたします。
お詳しい方がいらっしゃいましたら、どうぞよろしくお願いいたします。

投稿日時 - 2013-09-06 09:42:08

QNo.8251729

困ってます

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

Sub Split()

とプロシージャに既存のVBA関数と同じ名前を付けているからです。
同じ名前があるときは、近いところから参照しますので、
Split(.Cells(行, 1), " ") で自分自身を参照してしまってます。

Sub MySplit() というように既存関数と違う名前にするか、

temp = VBA.Split(.Cells(行, 1), " ")

というようVBAのSplitを参照するように明示するかですね。


ちなみに、結果をB,C,D列に入れたいのなら、

      .Cells(行, 列 + 2) = temp(列)

ですね。配列のインデックスは 0 起点ですので。

投稿日時 - 2013-09-06 10:07:49

お礼

 hatena1989様

 どうもありがとうございます!!
解決いたしました。なるほどサブルーチンを呼び出しに行っておりましたわけですか。。。^^; 全く原因が分かりませんでしたorz

 あと
>配列のインデックスは 0 起点ですので。
についてもご指摘いただき誠にありがとうございました。

 お教えいただいたお陰で一瞬で解決いたしました。
誠にありがとうございました!!m(_ _)m

投稿日時 - 2013-09-06 10:33:37

このQ&Aは役に立ちましたか?

0人が「このQ&Aが役に立った」と投票しています

回答(3)

ANo.3

他の方がおっしゃるとおり、マクロ名に予約語であるSplit()を使っているからエラーになります。

ついでに、最後から2行目は、
Application.ScreenUpdating = True

にしないとエラーになります。

投稿日時 - 2013-09-06 10:34:25

お礼

どうもありがとうございます!!m(_ _)m
(締め切り後もお礼できるんですね、今知りました^^;)
締め切るとほぼ同時にご回答をいただいたようで、お礼をしたかったなー、と考えておりました。遅れて大変失礼いたしました。

>Application.ScreenUpdating = True
 ご指摘いただきどうもありがとうございます。気づきませんでした^^;
 このたびはご親切に誠にありがとうございました!!m(_ _)m

投稿日時 - 2013-09-08 18:05:25

ANo.2

Splitっていう予約語を使ってユーザー関数を作っているのがダメでしょうね。

投稿日時 - 2013-09-06 10:29:07

お礼

 naktak様

 どうもありがとうございます!!m(_ _)m
No.1様からもご指摘いただいて解決いたしました。
この度はご閲覧・アドバイスいただき誠にありがとうございました!^^

投稿日時 - 2013-09-06 10:35:09

あなたにオススメの質問