【会員アンケートご協力のお願い】抽選で計5名様に役立つ書籍をプレゼント!
Excel (VBA) |
|
(指定なし : 指定なし)
出力がうまくいかない
投稿日時: 24/09/04 22:03:09
投稿者: yama1006
|
---|---|
やりたいこと
|
投稿日時: 24/09/04 22:34:34
投稿者: WinArrow
|
|
---|---|
引用: コードの中身はわからないので、見ていませんが、 > Application.Index(ary1, i, 64) の「i」の値をック人してみてください。 おそらくary1配列の最終行になっているとおもいます。 |
投稿日時: 24/09/05 06:52:36
投稿者: simple
|
|
---|---|
そもそもそのコードの意味は理解されているのですか?
Sub test() Dim r&, c& Dim v Rem 配列vを作成 For r = 1 To 3 For c = 1 To 4 Cells(r, c) = r & "," & c Next Next v = [A1:D3] 'その3行目だけを取り出す '縦に並べたいなら [F1].Resize(4, 1) = Application.Transpose(Application.Index(v, 3, 0)) '横に並べるなら [H1].Resize(1, 4) = Application.Index(v, 3, 0) End Sub |
投稿日時: 24/09/05 09:56:50
投稿者: Suzu
|
|
---|---|
既に、他の回答者からも指摘にあがっていますが
引用: 左辺 操作を受けるオブジェクトは、複数のセル 対して、代入する値は 右辺 Application.Index(ary1, i, 64) で、一つの値を指定しています。 複数のセルに対し、一つの値を指定しているので、同じ値が入って当然です。 Simpleさんのコードをお借りして 'その3行目だけを取り出す '縦に並べたいなら [F1].Resize(4, 1) = Application.Transpose(Application.Index(v, 3, 0)) '横に並べるなら [H1].Resize(1, 4) = Application.Index(v, 3, 0) [H2].Resize(1, 4) = Application.Index(v, 3) [H3].Resize(1, 4) = Application.Index(v, 3,1) こうすると Index の動作について確認しやすいかと思います。 もう一点 引用: この書き方はダメです。 Sub TEST2() Dim i As Long i = 2 If 4 < i < 6 Then MsgBox "OK" End If End Sub を実行すると確認できると思います。 |
投稿日時: 24/09/05 14:37:32
投稿者: simple
|
|
---|---|
単に配列をそのままシートに書き出すのであれば、
ws1.Range("BL10").Resize(UBound(ary1), UBound(ary1, 2)) = ary1ですね。 ary1 = Intersect(ws1.Range("A10").CurrentRegion, ws1.Columns("A:BM")).Value としているので、BL列でよいのか微妙ですけど。 |
投稿日時: 24/09/05 18:05:21
投稿者: WinArrow
|
|
---|---|
引用: Intersect(ws1.Range("A10").CurrentRegion, ws1.Columns("A:BM")) のセル範囲が意図した範囲になっているか?確認していましたか? Debug.Print Intersect(ws1.Range("A10").CurrentRegion, ws1.Columns("A:BM")).Address で確認できます。 >’ここがだめでしょうか? の答えです。 |
投稿日時: 24/09/06 07:42:48
投稿者: WinArrow
|
|
---|---|
途中に
|
投稿日時: 24/09/06 08:12:55
投稿者: WinArrow
|
|
---|---|
引用: 実際には、Match関数がエラーになることはないから、 勘違いしていると思うが、アンマッチになったとしても、 エラーにはならない。 つまり、COLBにはエラー番号が返ってこない。 先入観を捨てて、ステップ実行などで確認しましょう。 |
投稿日時: 24/09/06 10:38:43
投稿者: simple
|
|
---|---|
繰返して恐縮ですが、
|
投稿日時: 24/09/06 14:48:15
投稿者: WinArrow
|
|
---|---|
投稿日時: 24/09/06 07:42:48投稿者: WinArrow
|
投稿日時: 24/09/07 15:36:20
投稿者: WinArrow
|
|
---|---|
最初に戻って申し訳ないが、
引用: の中のws1.Range("A10").CurrentRegionです。 9行目(A9〜BM9)のどこかのセルにデータが入っていると、 ary1に格納したデータは、説明と違うことになります。 説明と一致させるには、↓のコードの方がよいでしょう。 With ws1 RxMax = .Range("A" & .Rows.Count).End(xlUp).Row ary1 = .Range(.Range("A10"), .Cells(RxMax, "BM")).Value End With 2番目 For i = 1 To UBound(ary1, 1) - 1 中略 Next で、ary1配列の中の一部のデータを再格納しています。 これは、どのような意図でしょうか? 3番目 Next以下のコードを見ると イメージとして、ループの中であるかのように見受けられます。 以上がおおきな疑問です。 まず、再確認してやりたいことを整理してみてください。 |