🎄teratailクリスマスプレゼントキャンペーン2024🎄』開催中!

\teratail特別グッズやAmazonギフトカード最大2,000円分が当たる!/

詳細はこちら
VBA

VBAはオブジェクト指向プログラミング言語のひとつで、マクロを作成によりExcelなどのOffice業務を自動化することができます。

Q&A

4回答

2123閲覧

二次元配列の一部初期化

pulim

総合スコア15

VBA

VBAはオブジェクト指向プログラミング言語のひとつで、マクロを作成によりExcelなどのOffice業務を自動化することができます。

0グッド

0クリップ

投稿2021/01/08 05:54

編集2021/01/08 07:24

vbaで二次元配列{x,1}の配列に数字を代入していく処理をしていますが、
途中で{x,0}の列の値を初期化(empty)する方法はありますか?

Sub Macro4() Dim A As Variant, B As Variant, i As Integer ReDim num(99, 1) A = 0 for i = 1 to 100 if i <50 then num(A,0)=i num(A,1)="○" A=A+1 else num(A,0)=i 'このタイミング前でここを一度空にしたい num(A,1)="×" A=A+1 end if end sub

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

y_waiwai

2021/01/08 06:00

初期化、とは具体的にどうするってことでしょうか
pulim

2021/01/08 06:05

代入した値を空(empty)としたいです。
guest

回答4

0

num(A, 0)はemptyが代入された直後、直ちにiが代入されるので、
emptyを設定する必要性が判りませんが
以下のようにしてください。

VBA

1Sub Macro4() 2 Dim A As Variant, B As Variant, i As Integer 3 4 ReDim num(99, 1) 5 A = 0 6 7 For i = 1 To 100 8 9 If i < 50 Then 10 num(A, 0) = i 11 num(A, 1) = "○" 12 13 A = A + 1 14 15 Else 16 17 num(A, 0) = Empty 'この行を追加 18 num(A, 0) = i 'このタイミング前でここを一度空にしたい 19 num(A, 1) = "×" 20 A = A + 1 21 End If 22 Next 23 24End Sub 25

投稿2021/01/08 08:29

tatsu99

総合スコア5493

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

emptyについて誤解しているようです。
emptyは初期化ではなくvariant型専用の「初期化していない状態」を指します。
しかしvariant型の初期値でもあります。

また、初期化という単語も状況に応じて複数の意味を持ちます。
内部に格納したいデータが数値integer型の0なのか、""による長さ(値)0なのか。
variant型のNullみたいに有効な値を持たない状態なのか。
変数の再定義を行いたいのか。
現状では判断がつきません。

【追記】
難しいことを考えましたが例えば

num(A, 0) = empty num(A, 0) = i

であれば配列にempty値を代入することは出来ます。

単純にこれでしたかね?

投稿2021/01/08 07:32

編集2021/01/08 07:52
退会済みユーザー

退会済みユーザー

総合スコア0

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

意図はまったくわかりませんがこんな感じ?
num(0,0)とnum(0,1)に値を上書きしてるだけですよね。
外でAのFor Nextしてるのかな。

vba

1For i = 1 To 49 2 num(A, 0) = i 3 num(A, 1) = "○" 4Next 5 6num(A, 0) = "" 7 8For i = 50 To 100 9 num(A, 0) = i 10 num(A, 1) = "×" 11Next

投稿2021/01/08 07:13

radames1000

総合スコア1925

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

pulim

2021/01/08 07:26

コード不足していました。 上書きではなく、配列に代入したいです。
guest

0

代入した値を空(empty)としたいです。

その処理の前にあらかじめ配列の全部を空にしといて、それから処理で値を入れていけばどうでしょう

投稿2021/01/08 06:08

y_waiwai

総合スコア88038

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

pulim

2021/01/08 06:16

初めに{x、1}で宣言し、作業の途中で{x、0}の列だけ初期化をする必要があります。 なので、{x、1}の列は作業内容を残しておきたいというのが目的です。
y_waiwai

2021/01/08 06:19

コードを出してもらわないとこれ以上はどうにもできませんねー
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.36%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問