
エクセルのVBAで配列を使おうと考えています。
データ配列 = Split(データ源, Chr(13))
として、1次元配列に取り込んだところ、chr(10)だけが入力されたデータ配列(?)が出来てしまいました。このデータ配列を詰めたいのですが、何かいい方法が無いでしょうか?教えてください。
元の配列
データ配列(0) "てすと1"
データ配列(1) chr(10)
データ配列(2) "テスト2"
とすれば、
詰めたあと、
データ配列(0) "てすと1"
データ配列(1) "テスト2"
となるようにしたいのです。(配列の最大数が減る必要が必ずしもありません。)
for each で回せばいいのでしょうか?
Dim 仮 AS Variant
for Each 仮 In データ配列
処理をここに書く
Next
では、上手く行きませんでした。
どなたか?詳しい方がいらっしゃいましたら教えてください。宜しくお願い致します。
No.5ベストアンサー
- 回答日時:
すみません。
コメントが一部不適切でした。' Filter 関数で Chr(10)を含むデータを取り除く
は
' Filter 関数で ・を含むデータを取り除く
の誤りです。もちろん Chr(10) を含むデータを取り除くことも可能です。
これだけだと、しょうもない回答なので、横レスになってしまい、恐縮ですが、、
> 変数をカウント(例:i=i+1)に使わないと分からないのでしょうか?
その場合は、通常 For Each ではなくて、最初から For ~ Next を使います。
> 配列から条件に一致したするものを取得した場合にどの配列番号から取得
> したのか?
Application.Match で調べられます。
> 2バイト文字を使うと誤動作...半分、見栄えや、入力のしやすさだけで、
> 使わないのかと思っていましたが?
例えば、
Dim strText
と宣言してあると、コーディング時に strtext と入力しても自動的に strText
に変換されます。コーディング時に入力のパンチミスを発見できるわけですが、
2バイト文字の場合、この機能は使えません。合理的な理由としてはこれ。
可読性については人それぞれなので、自分で使う分には2バイトを使っても構わ
ないかもしれませんが、私はコメントとコードの境界がなくなって「読み難い」
し、嫌う人は多いです。
2バイト文字の変数やプロシージャ名が原因で誤動作するかどうかについて、
誤動作する可能性があるとの話は聞いたことがあります。しかし、実際に自分で
体験したことはありません。
重ね重ねの質問にも、丁寧に丁寧を重ねたご回答有難う御座います。
>For Each ではなくて、最初から For ~ Next
は、For ~ Nextよりも、For Each の方が内部処理が早いと聞いたもので、使えないかと思いましたが、やはり無理なんですね?当然、その差が問題になるようなコードを書いているわけではないのですが、少し背伸びをしてみただけです。
Application.Match については、是非、活用させていただきたいと思います。何せ、よく分かっていないので、ヘルプなどを見ても、その書いている文章の価値が理解出来ないので、応用が利かないのが現実です。一寸したヒントでも頂けると凄く助かります。
2バイト文字については、今後良く考えて行きたいと思います。
No.6
- 回答日時:
Wendy02です。
>変数をカウント(例:i=i+1)に使わないと分からないのでしょうか?
私は、個々の問題に対して回答をしましたが、For Each .. In ... が、For i = LBound(..) To Ubound(..) であろうが、あまり大差を感じているわけではありません。また、Filter関数を使うか使わないかは、ご自身の選択の範囲だと思います。
ただ、私個人は、一律にデータが規則どおりになっていればよいのですが、そうとは限らないので、実際には、Filter関数では、あまりうまく行かないような気がするので、使わないだろうと思っています。
最終的な目的が何か、ということが大事なので、
「Filterで、配列から条件に一致したするものを取得した場合にどの配列番号から取得したのか?を得る方法ってあるのでしょうか?」
というような実験的なものに対しては、直接的な回答は出来かねます。Filter関数を使わなくてはならない意味と、それによって配列の添え字を取得することは、私の経験にはないことです。その意義を見出せません。ご自身が、いろいろやってみることだと思います。
>2バイト文字を使うと誤動作ってするのですか?
VBE内は、Unicodeですから、それが、あまり問題は少ないだろうとは思っています。特に、私の使用しているExcelは、日本語バージョンですので、トラブルは経験したことはありません。おそらく、これは、他の言語のVBAを想定したものかもしれません。事実、私の使用しているVBEユーティリティでは、日本語の部分は、文字化けしてしまいます。
それは別としても、これは、VBAの基礎のルールとして掲げられているものですから、回答する立場の私としては、コードを公にする以上は、一応、但し書きとしては書かざるを得ないのです。ご質問者個人が、プライベートでお使いになる分には、誰も関知するものではありません。
なんだか?お怒りのようで、誠に申し訳ありません。
便乗質問したのが気に入らなかったようで、すみません。確かに、個々が、各々の条件でやろうとしていることを全て把握して答えるのは難解を極めると思います。もう少し、補足の使い方には重々に注意していきたいと思います。
これに、懲りずに今後とも宜しくお願い致します。
Wendy02さんのおかげで、随分VBAも自由に組めるように(当然、Wendy02さんの足元にも及ばないですが)なってきました。本当に、本当に有難う御座いました。
No.4
- 回答日時:
こんにちは。
KenKen_SP です。Chr(10)って vbLf のことですよね....どんなデータなのでしょうか?
今回の用途なら Filter 関数一行で済むと思いますが。
便宜上、Chr(10)を”・”にして、それを含む配列要素を取り除いています。
Sub Sample()
Dim A(5) As String
Dim Buf As Variant
' テスト用配列データ
A(0) = "てすと1"
A(1) = "・"
A(2) = "テスト2"
A(3) = "TEST3" & "・"
A(4) = "・" & "TEST4"
A(5) = "・"
' 処理前のデータを表示
MsgBox Join$(A, vbLf)
' Filter 関数で Chr(10)を含むデータを取り除く
Buf = Filter(SourceArray:=A, _
Match:="・", _
Include:=False)
' 取り除かれたか確認表示
MsgBox Join$(Buf, vbLf)
End Sub
No.3
- 回答日時:
こんにちは。
データ配列 = Split(データ源, Chr(13))
果たして、そのようなことがありえるのか、データの入手方法が見えていないので、なんとなく、そういう配列の生成がヘンな気がしますが、それは置いておいて、すでに、データ配列という配列変数が出来上がったとすれば、後を以下のようにすれば、取れますね。
Dim データ配列 As Variant
Dim 仮 As Variant
'配列変数が、ここで出来上がったとして
Dim データ配列2() As Variant
Dim i As Long
For Each 仮 In データ配列
If 仮 > Chr(30) Then
ReDim Preserve データ配列2(i)
データ配列2(i) = 仮
i = i + 1
End If
Next
(便宜的に、ここでは、2バイト文字の変数を使いました。本来は、誤動作の元になりますので、使ってはいけません。)
この回答への補足
いつもいつも有難う御座います。
なるほど、別の動的配列を用意すればいいのですね?有難う御座います。あわせて、ご質問したいのですが、For Each で配列をループさせている時に、ある条件でIF文で引っかかった時に何番目の配列要素かどうかは、変数をカウント(例:i=i+1)に使わないと分からないのでしょうか?
また、Filterで、配列から条件に一致したするものを取得した場合にどの配列番号から取得したのか?を得る方法ってあるのでしょうか?
重ね重ねよろしくお願いします。
2バイト文字を使うと誤動作ってするのですか?英語が苦手な私としては、可読性のために使っていますが??(プログラミングのどの本を読んでも、2バイトを使っている本って見たことありませんが・・・?半分、見栄えや、入力のしやすさだけで、使わないのかと思っていましたが?)
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Microsoft ASP プログラミング関係で質問です。 3 2022/10/11 16:06
- Visual Basic(VBA) VBAで大量データの処理 3 2022/11/15 21:53
- Visual Basic(VBA) VBA横データを縦にしたいです 2 2023/08/08 19:38
- C言語・C++・C# C言語初心者 ポインタについて、お助けください、、 2 2023/03/15 23:50
- PHP 配列の値の更新方法について 1 2022/08/05 09:49
- Visual Basic(VBA) 列と行の名前(重複あり)が交差するセルに、データを入力したい 2 2022/06/25 22:42
- Visual Basic(VBA) 列と行の名前(重複あり)が交差するセルに、データを入力したい 3 2022/06/12 11:17
- C言語・C++・C# このプログラミングの問題を教えてほしいです。 キーボードからデータ数nとn個のデータを入力し、平均値 3 2022/12/19 22:51
- Excel(エクセル) excel vbaの配列なんですが・・・ 1 2022/12/26 18:50
- Visual Basic(VBA) ファイル全てを .xlsm に変更したところ、プログラムが途中で落ちてしまっています 17 2022/12/07 12:03
このQ&Aを見た人はこんなQ&Aも見ています
-
性格悪い人が優勝
できるだけ性格悪い人になって回答をお願いします。
-
「これはヤバかったな」という遅刻エピソード
寝坊だったり、不測の事態だったり、いずれにしても遅刻の思い出はいつ思い出しても冷や汗をかいてしまいますよね。
-
限定しりとり
文字数6文字以上の単語でしりとりしましょう
-
一番好きなみそ汁の具材は?
みんなで大好きなみそ汁の具材について語り合おうよっ!
-
人生で一番お金がなかったとき
人生で一番お金がなかったときって、どんなときでしたか?
-
配列でデータが入っている要素を求める方法
Visual Basic(VBA)
-
VBAでブックを非表示で開いて処理して閉じる方法
Excel(エクセル)
-
VBA 空白セルを削除ではない方法で詰めるやり方
Visual Basic(VBA)
-
-
4
表にフィルターをかけ、絞ったデータ(可視化セルのみ)を一次元配列として変数に入れるという動作を書きた
Visual Basic(VBA)
-
5
エクセル:マクロ「Application.CutCopyMode = False」って?
Excel(エクセル)
-
6
2次元配列を部分的に削除する方法
Visual Basic(VBA)
-
7
Variant型で宣言してるのにEmptyになる
Visual Basic(VBA)
-
8
複数の条件に合う行番号を取得するには
その他(Microsoft Office)
-
9
VBAでファイルを開くときにファイル名でワイルドカードを使用したいです
その他(プログラミング・Web制作)
-
10
読み込みで一行おきに配列に格納
Visual Basic(VBA)
-
11
EXCEL VBAで全選択範囲の解除
Excel(エクセル)
-
12
VBA 数式を残して値をクリアについて
Excel(エクセル)
-
13
countif/sumifのようなVBA関数
Visual Basic(VBA)
-
14
VBA アクティブでないシートのセルを選択したり、クリアしたり
Excel(エクセル)
-
15
エクセルVBAのIF文の否定の複数条件
Excel(エクセル)
-
16
マクロの「SaveAs」でエラーが出るのを解消したいです(再)
Visual Basic(VBA)
-
17
エクセルVBAで、MsgBox やInputBox は、画面の中央以外に表示させたい。
Excel(エクセル)
-
18
VBA 1次元配列を2次元に追加する
Visual Basic(VBA)
-
19
VBAで保存しないで閉じると空のBookが残る
Excel(エクセル)
-
20
VBAでの Replace関数で、ワイルドカードは使えないのでしょうか?
Visual Basic(VBA)
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・「それ、メッセージ花火でわざわざ伝えること?」
- ・ゆるやかでぃべーと すべての高校生はアルバイトをするべきだ。
- ・【お題】甲子園での思い出の残し方
- ・【お題】動物のキャッチフレーズ
- ・人生で一番思い出に残ってる靴
- ・これ何て呼びますか Part2
- ・スタッフと宿泊客が全員斜め上を行くホテルのレビュー
- ・あなたが好きな本屋さんを教えてください
- ・かっこよく答えてください!!
- ・一回も披露したことのない豆知識
- ・ショボ短歌会
- ・いちばん失敗した人決定戦
- ・性格悪い人が優勝
- ・最速怪談選手権
- ・限定しりとり
- ・性格いい人が優勝
- ・これ何て呼びますか
- ・チョコミントアイス
- ・単二電池
- ・初めて自分の家と他人の家が違う、と意識した時
- ・「これはヤバかったな」という遅刻エピソード
- ・ゴリラ向け動画サイト「ウホウホ動画」にありがちなこと
- ・泣きながら食べたご飯の思い出
- ・一番好きなみそ汁の具材は?
- ・人生で一番お金がなかったとき
- ・カラオケの鉄板ソング
- ・自分用のお土産
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
VBA 変数名に変数を使用したい。
-
C#でbyte配列から画像を表示さ...
-
Redim とEraseの違いは?
-
vba フィルター 複数条件 3つ以...
-
OutOfMemoryExceptionの回避策...
-
Imagelist の使い回しについて
-
VBの添削をお願いします。
-
VBA フォルダ内のファイルを、...
-
配列のペースト出力結果の書式...
-
エクセルでXY座標に並べられた...
-
配列の中の最大値とそのインデ...
-
EXCELを使って、アクセスログを...
-
Variant型配列の文字コード変換
-
順列をランダムに発生するプロ...
-
プログラムからMySQLを使うとき...
-
Dir関数で読み取り順を操作でき...
-
複数のtextboxの処理を一括で行...
-
VBAで、配列のデータをセル...
-
Msgboxのループ
-
VB6のメモリ解放に関して
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
VBA 変数名に変数を使用したい。
-
vba フィルター 複数条件 3つ以...
-
エクセルでXY座標に並べられた...
-
C#でbyte配列から画像を表示さ...
-
Dir関数で読み取り順を操作でき...
-
配列の中の最大値とそのインデ...
-
構造体配列の特定のメンバーをF...
-
配列のペースト出力結果の書式...
-
CheckBoxの配列化
-
VBAでMODE関数をつくる
-
レコードセットの中身を配列に...
-
Redim とEraseの違いは?
-
VB.NETの配列にExcelから読み込...
-
複数のtextboxの処理を一括で行...
-
Excel2010のinputboxで複数デー...
-
定数配列の書き方
-
COBOLの基本的な事なので...
-
DBから取得した値を配列へ代入する
-
VB.NETの配列の限界を教えてく...
-
Segmentation Fault (メモリ制限?)
おすすめ情報