配列2つからそれぞれ要素を取り出して組み合わせ、
新たな配列を作りたくて下記のコードを書きましたが
どうしても★のところで「コンパイルエラー:SubまたはFunctionが定義されていません。」
というエラーになってしまいます。すごく基本的なミスのようでお恥ずかしいのですが、
どうか解決方法・アドバイスをお願いいたします。m(_ _)m
なお、最終的に作りたい配列の中身は下記のような規則性を持ったものです。
(後からもっと増やす予定なのでループでの処理を希望しています。)
'RankFirstCell = Array("B10", "B26", "B42", "B58", "B74", "H10", "H26", "H42", "H58", "H74", "N10", "N26", "N42", "N58", "N74")
--- 問題の部分はここから ---
Dim RankCols, RankRows As Variant
RankCols = Array("B", "H", "N")
RankRows = Array(10, 26, 42, 58, 74)
Dim x, y, z As Byte
Dim RankFirstCell(14) As String 'ここの記述の仕方の問題でしょうか?
For x = 0 To 14
y = Application.WorksheetFunction.RoundDown(x / 5, 0)
z = x Mod 5
RankFristCell(x) = RankCols(y) + RankRows(z) '★エラー行
Next x
--- ここまで ---
ちなみにx, y, zの値は下記のように希望通りループできているみたいです。(ウォッチウィンドウにて確認)
x|y|z
------
0|0|0
1|0|1
2|0|2
3|0|3
4|0|4
5|1|0
6|1|1
7|1|2
8|1|3
9|1|4
10|2|0
11|2|1
12|2|2
13|2|3
14|2|4
どうぞよろしくお願いいたします。
No.4ベストアンサー
- 回答日時:
解決されたのなら良いのですが、
Dim RankFirstCell(14) As String
と、
RankFristCell(x)
で綴りが違っていますが、大丈夫でしょうか?
あと、
Dim x, y, z As Byte
で、メモリの節約をなさりたいのでしょうが、この書き方だと、x,yはVariantになってしまいます。(VBAの仕様です)
また、現在の32bit CPUの時代では、long型にした方が速いという説もあります。
自分でこの恥ずかしいスペルミスに気づいて最初のお三方へのお礼を記入している間に
お返事をいただきまして、ありがとうございます!
結果的に x, y, zをVariant型にすべき点および
Byte型の件へのご教授とアドバイスをいただくことができたので
お礼書き込みと質問締め切りのタイムラグは私にとってめっちゃラッキーでした。
本当にありがとうございました!!!
No.3
- 回答日時:
>RankFristCell(x) = RankCols(y) + RankRows(z) '★エラー行
文字列の加算”+”はしません。
文字を結合する場合は、”&”を使用します。
ものすごく恥ずかしいことにFirstのスペルミスでした・・・。
と同時に文字列結合を+でしてしまっている激烈に恥ずかしいミスも
ご指摘いただくまで全く気づいていなかったので、とても助かりました。
ありがとうございました!
No.2
- 回答日時:
何をしたいのかよく分からないので的確な回答になりませんが
>Dim x, y, z As Byte
Dim x, y, z As Integer
>RankFristCell(x) = RankCols(y) + RankRows(z)
「+」は足し算ですから数値以外の演算はエラーになります
RankFristCell(x) = RankCols(y) & RankRows(z)
ではないでしょうか
ものすごく恥ずかしいことにFirstのスペルミスでした・・・。
と同時に文字列結合を+でしてしまっている激烈に恥ずかしいミスも
ご指摘いただくまで全く気づいていなかったので、とても助かりました。
ありがとうございました!
ちなみにByteの件はあえて0-255以外の整数は使わない見通しなので
あえてメモリ負担を少しでも減らすために使っています。
たぶん気分の問題程度なのでしょうが・・・。(^^;
No.1
- 回答日時:
VBA知らない人間の戯言ですが
>RankRows = Array(10, 26, 42, 58, 74)
RankRows = Array("10", "26", "42", "58", "74")
と違う?
RankCols 足して RankRows 文字列作りたいんですよね?
文字と数字を足そうとしてその結果を文字に入れようとしてる
ってのが間違いだと思いますが実際の書き方は分からなかったりする
解決しました。
いただいた指摘に関しては、将来の可能性として計算しないとも限らないので
あえて文字列ではなく数値として残しています。(間違っているかもしれませんが。)
コメントありがとうございました!
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) 前回ご教授いただいたコードに覚えたてのループ処理で品名りんごAから順に20回for nextでループ 7 2023/01/13 22:01
- Visual Basic(VBA) 別シートから年齢別の件数をカウントしたいの続き 5 2023/01/24 00:16
- Visual Basic(VBA) VBA横データを縦にしたいです 2 2023/08/08 19:38
- Visual Basic(VBA) 数字が「0」の列を削除するため、下記のコードを実行しましたが、コンパイルエラーSubまたはFunct 3 2022/12/04 00:00
- Excel(エクセル) Excelにて、フォルダ内のTextファイルをマクロで統合すると文字化けしてしまう時の解消コード 4 2023/01/01 07:32
- Visual Basic(VBA) 別シートのデータを参照して値を入れたい。 まとめデータシートのC列D列の値を商品一覧シートのコードが 7 2022/08/17 13:20
- PHP 配列の値の更新方法について 1 2022/08/05 09:49
- Visual Basic(VBA) Sheet1のA列にコードB列にメアド、Sheet2のB列にコード一覧とD列にメアド一覧があり、Sh 3 2022/10/19 11:57
- Visual Basic(VBA) Vbaで数式をポーランド記法に変換するコードを作って実行しようとするとフリーズします。 1 2022/05/24 17:53
- Visual Basic(VBA) 型が一致しませんとエラー 6 2023/07/06 20:14
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
VBA 変数名に変数を使用したい。
-
C#でbyte配列から画像を表示さ...
-
COBOLの基本的な事なので...
-
VB6からの移行したいけど、VB.N...
-
vba フィルター 複数条件 3つ以...
-
2次元配列の初期値
-
テキストボックの文字を一行ず...
-
配列の中の最大値とそのインデ...
-
構造体配列の特定のメンバーをF...
-
Excel2010のinputboxで複数デー...
-
VB.NETの配列にExcelから読み込...
-
Segmentation Fault (メモリ制限?)
-
エクセルでXY座標に並べられた...
-
OutOfMemoryExceptionの回避策...
-
Redim とEraseの違いは?
-
コンボボックスのインデックス...
-
定数配列の書き方
-
C#で作成したdllをVBScriptで使...
-
画像の座標取得
-
オブジェクト名を変数で参照で...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
VBA 変数名に変数を使用したい。
-
Excel2010のinputboxで複数デー...
-
vba フィルター 複数条件 3つ以...
-
C#でbyte配列から画像を表示さ...
-
配列のペースト出力結果の書式...
-
Dir関数で読み取り順を操作でき...
-
エクセルでXY座標に並べられた...
-
VBAで配列引数を値渡しできない...
-
C++で作成したDLLにVBAから配列...
-
構造体配列の特定のメンバーをF...
-
OutOfMemoryExceptionの回避策...
-
大量の変数を定義するにはどう...
-
VBAでMODE関数をつくる
-
VBScriptでCSVファイルを読み出...
-
定数配列の書き方
-
Segmentation Fault (メモリ制限?)
-
Excelのメモリ(配列)の上限は2G...
-
Redim とEraseの違いは?
-
CheckBoxの配列化
-
配列の中の最大値とそのインデ...
おすすめ情報