Excel VBA質問箱 IV

当質問箱は、有志のボランティア精神のおかげで成り立っています。
問題が解決したら、必ずお礼をしましょうね。
本サイトの基本方針をまとめました。こちら をご一読ください。

投稿種別の選択が必要です。ご注意ください。
迷惑投稿防止のため、URLの入力を制限しています。ご了承ください。


11240 / 13646 ツリー ←次へ | 前へ→

【17094】INDEX関数の繰り返し処理 さる 04/8/22(日) 0:30 質問[未読]
【17095】Re:INDEX関数の繰り返し処理 Asaki 04/8/22(日) 0:42 回答[未読]
【17097】Re:INDEX関数の繰り返し処理 さる 04/8/22(日) 1:40 質問[未読]
【17098】Re:INDEX関数の繰り返し処理 さる 04/8/22(日) 10:26 質問[未読]
【17103】Re:INDEX関数の繰り返し処理 さる 04/8/22(日) 19:34 質問[未読]
【17104】Re:INDEX関数の繰り返し処理 さる 04/8/23(月) 0:55 質問[未読]
【17111】とりあえず・・・ つん 04/8/23(月) 11:47 回答[未読]
【17143】Re:とりあえず・・・ さる 04/8/23(月) 22:49 お礼[未読]
【17115】Re:INDEX関数の繰り返し処理 Asaki 04/8/23(月) 13:07 回答[未読]
【17142】Re:INDEX関数の繰り返し処理 さる 04/8/23(月) 21:13 質問[未読]
【17146】Re:INDEX関数の繰り返し処理 Asaki 04/8/24(火) 0:13 回答[未読]
【17148】Re:INDEX関数の繰り返し処理 さる 04/8/24(火) 0:47 質問[未読]
【17149】Re:INDEX関数の繰り返し処理 Asaki 04/8/24(火) 0:54 回答[未読]
【17150】Re:INDEX関数の繰り返し処理 Asaki 04/8/24(火) 0:56 発言[未読]
【17158】Re:INDEX関数の繰り返し処理 さる 04/8/24(火) 12:05 質問[未読]
【17162】Re:INDEX関数の繰り返し処理 Asaki 04/8/24(火) 12:35 回答[未読]
【17192】Re:INDEX関数の繰り返し処理 さる 04/8/24(火) 17:50 質問[未読]
【17220】Re:INDEX関数の繰り返し処理 さる 04/8/24(火) 22:42 質問[未読]
【17221】Re:INDEX関数の繰り返し処理 さる 04/8/24(火) 23:03 お礼[未読]
【17224】Re:INDEX関数の繰り返し処理 Asaki 04/8/25(水) 0:35 回答[未読]
【17248】Re:INDEX関数の繰り返し処理 さる 04/8/25(水) 17:56 質問[未読]
【17251】Re:INDEX関数の繰り返し処理 Asaki 04/8/25(水) 18:18 回答[未読]
【17261】Re:INDEX関数の繰り返し処理 さる 04/8/25(水) 23:19 質問[未読]
【17262】Re:INDEX関数の繰り返し処理 Asaki 04/8/25(水) 23:25 回答[未読]
【17264】Re:INDEX関数の繰り返し処理 さる 04/8/25(水) 23:43 お礼[未読]

【17094】INDEX関数の繰り返し処理
質問  さる E-MAIL  - 04/8/22(日) 0:30 -

引用なし
パスワード
    シート1(データ元)
A BCDEFGHIJKLMNLOP
ss 2221234342112332
si 2132422334142342
ai 2313213341232133
oh 3233321114422341
aa 3213233144234334
    ・
    ・

シート2(データ変換)
ABCDEFGHIJ K L M N L O P
-12345678910111213141516→データ元の列と順番通りです。 
1333300030 3 0 3 0 0 3 3  縦A列の1234は点数です。
2222211121 2 1 2 1 1 2 2  B2セルは2点ならばB列にA列の2点に当てはまり2点
3111122212 1 2 1 2 2 1 1  なります。
4000033303 0 3 0 3 3 0 0

シート3(データ変換後)
A BCDEFGHIJKLMNLOP
ss 2223223132031212
si 3312311120001202
ai 2131102133111011
oh 1211210300321203
aa 1231122330113210
     ・
     ・

B2セルにデータ元を読み取ってシート2の元で置換してシート3(シート3へコピー?表示?)へ表示して行が空欄するまで繰り返しします

2→シート2にINDEX関数で一致したら置換してシート3へ表示します。

構文
Dim i As Long
Dim t As Long
Dim suto As WorkSheets
Set suto = WorkSheets("シート2")
For i = 2 To Range("A65536").End(xlUp).Row
   For t = 2 To 16 Step -1
worksheets("シート3”).cells(i,2).Value= Index(suto.range("B2:P5"),match(t,suto.range("A2:A5"),match(cells(i,t),suto.range("B1:P1"),1,1))
Next i
Next t

INDEX関数について本の参考が載っていませんのでどなたかたに
教えてくださるようお願いします。

【17095】Re:INDEX関数の繰り返し処理
回答  Asaki  - 04/8/22(日) 0:42 -

引用なし
パスワード
   こんばんは。

内容はあまり見ていませんが、とりあえず、
ワークシート関数をVBAから利用するには
WroksheetFunction.Index()
という書き方をします。

【17097】Re:INDEX関数の繰り返し処理
質問  さる E-MAIL  - 04/8/22(日) 1:40 -

引用なし
パスワード
   ▼Asaki さん:
>こんばんは。
>
>内容はあまり見ていませんが、とりあえず、
>ワークシート関数をVBAから利用するには
>WroksheetFunction.Index()
>という書き方をします。
Dim i As Long
Dim t As Long
Dim suto As WorkSheets
Set suto = WorkSheets("シート2")
For i = 2 To Range("A65536").End(xlUp).Row
   For t = 2 To 16 Step -1
worksheets("シート3”).cells(i,2).Value= WorksheetFunctionIndex(suto.range("B2:P5"),match(t,suto.range("A2:A5"),match(cells(i,t),suto.range("B1:P1"),1,1))
Next i
Next t

Sub またはFunCtionが定義されていませんとエラーがでましたけど
どこか悪いですか?

【17098】Re:INDEX関数の繰り返し処理
質問  さる E-MAIL  - 04/8/22(日) 10:26 -

引用なし
パスワード
   ▼Asaki さん:
>>こんにちわ
いつもお世話になります。申し訳はありませんでした。
ワークシート関数をVBAから利用するには
>WroksheetFunction.Index()
の方法だけなくて他の方法もありますか?
要するとデータを読み取って置換するだけです。
どうかよろしくお願いします。

【17103】Re:INDEX関数の繰り返し処理
質問  さる E-MAIL  - 04/8/22(日) 19:34 -

引用なし
パスワード
   ▼Asaki さん:
>こんばんは。
>
>内容はあまり見ていませんが、とりあえず、
>ワークシート関数をVBAから利用するには
>WroksheetFunction.Index()
>という書き方をします。
Dim 検査値1 As Long
Dim 検査値2 As Long


With Worksheets("シート2")
  Worksheets("シート1").Select
  For 検査値2 = 2 To Range("A65536").End(xlUp).row
   For 検査値1 = 2 To 16
  
    Worksheets("シート3").Cells(検査値2, 検査値1).Value = WorksheetFunction.Index(.Range("B2:A5"), WorksheetFunction.Match(検査値1, .Range("B1:AU1"), 0), WorksheetFunction.Match(Cells(検査値2, 検査値1), .Range("A2:A5"), 1))
    Next 検査値1
  Next 検査値2
  End With
    
End Sub
>
「WorksheetFunction クラスのIndexプロパティを取得できません」コンパイルエラーがでましたけどどこか悪いですか?

【17104】Re:INDEX関数の繰り返し処理
質問  さる E-MAIL  - 04/8/23(月) 0:55 -

引用なし
パスワード
   ▼Asaki さん:
IndexだけなくVLOOKUPもできますけどこちらのほうがいいですか?
VLOOKUP関数で
Dim i As Long
Dim k As Long

With Worksheets("シート2")
  Worksheets("シート1").Select
  For i = 2 To Range("A65536").End(xlUp).row
'kは列1つごとに追加します。(A列=1、B列=2・・・・)
 
  For k = 2 To 16 +1
  
    Worksheets("シート3").Cells(i, k).Value = WorksheetFunction.Vlookup(.Cells(i , k), .Range("B1:AU1"), k,FALSE)
    Next i
  Next k
  End With
    
End Sub

このコードはどこか悪いですか?どうか教えて下さい
お願いします。

【17111】とりあえず・・・
回答  つん E-MAIL  - 04/8/23(月) 11:47 -

引用なし
パスワード
   さる さん、おはようございます。

>Dim i As Long
>Dim k As Long
>
>With Worksheets("シート2")
>  Worksheets("シート1").Select
>  For i = 2 To Range("A65536").End(xlUp).row
>'kは列1つごとに追加します。(A列=1、B列=2・・・・)
> 
>  For k = 2 To 16 +1
>  
>    Worksheets("シート3").Cells(i, k).Value = WorksheetFunction.Vlookup(.Cells(i , k), .Range("B1:AU1"), k,FALSE)
>    Next i
>  Next k
>  End With
>    
>End Sub

とりあえず……
まず、
  For k = 2 To 16 +1
が変です。
Kの値を一つずつ増やすなら、k = 2 To 16 だけでOKです。
「16 +1」にすると、「17」までということになります。
どうしても「1増やす」というのを書くなら「Step 1」です。

それから、ループが2重になってますが、
さるさんのは

 For i = 1 to x
  For k = 1 to x
    ・・・
  Next i
Next k

になってしまってます。
 

【17115】Re:INDEX関数の繰り返し処理
回答  Asaki  - 04/8/23(月) 13:07 -

引用なし
パスワード
   みなさま、こんにちは。

取り敢えず、
>IndexだけなくVLOOKUPもできますけどこちらのほうがいいですか?
意図した結果が出ているのなら良いのでは?

今ひとつ処理内容が理解できていませんが、こういうことでしょうか?

Sub test()
  Dim rngOrg   As Range
  Dim rngRes   As Range
  Dim c      As Range
  Dim i      As Long
  
  '変換前データのセル範囲を変数に設定
  With Worksheets("Sheet1")
    Set rngOrg = .Range(.Cells(1, 2), .Cells(65536, 1).End(xlUp).Offset(, 16))
  End With
  '変換後データ格納セルをクリア、セル範囲を変数に設定
  '項目名コピー
  With Worksheets("Sheet3")
    Set rngRes = .Range(rngOrg.Address)
    .UsedRange.Clear
    .Cells(1, 1).Resize(rngOrg.Rows.Count).Value = rngOrg.Resize(, 1).Offset(, -1).Value
  End With

  '変換
  i = 1
  With Worksheets("Sheet2")
    For Each c In rngOrg
      rngRes(i).Value = .Cells(c.Value + 1, c.Column).Value
      i = i + 1
    Next c
  End With

  'オブジェクト解放
  Set rngOrg = Nothing
  Set rngRes = Nothing

End Sub


ちなみに、ループは回し始めたのと逆の順に Next を書くことになります。

【17142】Re:INDEX関数の繰り返し処理
質問  さる E-MAIL  - 04/8/23(月) 21:13 -

引用なし
パスワード
   ▼Asaki さん:
ありがとうございます。
申し訳はありません。説明不足で迷惑かけて大変申し訳はありません。
実行してみたらエラー13(型が一致しません)と表示してありますが
もしかしたらシート1が氏名だけなく年齢と社員番号、性別、備考1備考2備考3が
あります。これを変換しないてこのままでコピーして以降は変換してコピーします。
 シート1(データ元)
 A  B  C  D   E  F  G  H  I  J K L M N L O 〜 BM
氏名 社番 年齢 性別 ID 備1 備2 備3 A-1 2 3 4 5 6 7 8....65まで 
ss  001  25  1  001        2  2 2 1 2 3 4 3.... 
si  002  23  2  002        2  1 3 2 4 2 2 3....
ai  003  20  2  003        2  3 1 3 2 1 3 3....
oh  004  50  2  004        3  2 3 3 3 2 1 1....
aa  005  33  1  005        3  2 1 3 2 3 3 1....
    ・
    ・

シート2(検査範囲用)
A BCDEFGHIJ K L M N L O P
− 12345678910111213141516〜65まで データ元の列と順番通りです。 
1点333300030 3 0 3 0 0 3 3...   縦A列の1234は点数です。
2点222211121 2 1 2 1 1 2 2... B2セルは2点ならばB列にA列の2点に当てはまり
3点111122212 1 2 1 2 2 1 1... 2点なります。
4点000033303 0 3 0 3 3 0 0...

シート3(データ変換後)
 A  B  C  D   E  F  G  H  I  J K L M N L O 〜 BM
氏名 社番 年齢 性別 ID 備1 備2 備3 A-1 2 3 4 5 6 7 8....65まで 
ss  001  25  1  001        2  2 2 3 2 2 3 1.... 
si  002  23  2  002        3  3 1 2 3 1 1 1....
ai  003  20  2  003        2  1 3 1 1 0 2 1....
oh  004  50  2  004        1  2 1 1 2 1 0 3....
aa  005  33  1  005        1  2 3 1 1 2 2 3....

前より詳しく説明しますのでよろしくお願いします。
     ・

B2セルにデータ元を読み取ってシート2の元で置換してシート3(シート3へコピー?表示?)へ表示して行が空欄するまで繰り返しします

2→シート2にVLOOKUP関数で一致したら置換してシート3へ表示します。

>Sub test()
>  Dim rngOrg   As Range
>  Dim rngRes   As Range
>  Dim c      As Range
>  Dim i      As Long
>  
>  '変換前データのセル範囲を変数に設定
>  With Worksheets("Sheet1")
>    Set rngOrg = .Range(.Cells(1, 2), .Cells(65536, 1).End(xlUp).Offset(, 16))
>  End With
>  '変換後データ格納セルをクリア、セル範囲を変数に設定
>  '項目名コピー
>  With Worksheets("Sheet3")
>    Set rngRes = .Range(rngOrg.Address)
>    .UsedRange.Clear
>    .Cells(1, 1).Resize(rngOrg.Rows.Count).Value = rngOrg.Resize(, 1).Offset(, -1).Value
>  End With
>
>  '変換
>  i = 1
>  With Worksheets("Sheet2")
>    For Each c In rngOrg
>      rngRes(i).Value = .Cells(c.Value + 1, c.Column).Value
>      i = i + 1
>    Next c
>  End With
>
>  'オブジェクト解放
>  Set rngOrg = Nothing
>  Set rngRes = Nothing
>
>End Sub
>
>
>ちなみに、ループは回し始めたのと逆の順に Next を書くことになります。
知らなかった。いい勉強になりました。

【17143】Re:とりあえず・・・
お礼  さる E-MAIL  - 04/8/23(月) 22:49 -

引用なし
パスワード
   ▼つん さん:
>さる さん、おはようございます。
>
>>Dim i As Long
>>Dim k As Long
>>
>>With Worksheets("シート2")
>>  Worksheets("シート1").Select
>>  For i = 2 To Range("A65536").End(xlUp).row
>>'kは列1つごとに追加します。(A列=1、B列=2・・・・)
>> 
>>  For k = 2 To 16 +1
>>  
>>    Worksheets("シート3").Cells(i, k).Value = WorksheetFunction.Vlookup(.Cells(i , k), .Range("B1:AU1"), k,FALSE)
>>    Next i
>>  Next k
>>  End With
>>    
>>End Sub
>
>とりあえず……
>まず、
>  For k = 2 To 16 +1
>が変です。
>Kの値を一つずつ増やすなら、k = 2 To 16 だけでOKです。
>「16 +1」にすると、「17」までということになります。
>どうしても「1増やす」というのを書くなら「Step 1」です。
>
>それから、ループが2重になってますが、
>さるさんのは
>
> For i = 1 to x
>  For k = 1 to x
>    ・・・
>  Next i
> Next k
>
>になってしまってます。
>  
アドバイスありがとうございました。
初歩的ミスが多いのですみませんでした。
私はVBA始めたのは今年からですのでこれから
ご指導お願いします。

【17146】Re:INDEX関数の繰り返し処理
回答  Asaki  - 04/8/24(火) 0:13 -

引用なし
パスワード
   サンプルデータと異なる場合は、ご自分で範囲を変更するなりして試してみてください。

>Set rngOrg = .Range(.Cells(1, 2), .Cells(65536, 1).End(xlUp).Offset(, 16))

Set rngOrg = .Range(.Cells(2, 9), .Cells(65536, 1).End(xlUp).Offset(, 65))

>.Cells(1, 1).Resize(rngOrg.Rows.Count).Value = rngOrg.Resize(, 1).Offset(, -1).Value

.Cells(2, 1).Resize(rngOrg.Rows.Count).Value = rngOrg.Resize(, 9).Offset(, -8).Value

試してませんので、上手くいかなかったらごめんなさい。

【17148】Re:INDEX関数の繰り返し処理
質問  さる E-MAIL  - 04/8/24(火) 0:47 -

引用なし
パスワード
   ▼Asaki さん:
>サンプルデータと異なる場合は、ご自分で範囲を変更するなりして試してみてください。
>
>>Set rngOrg = .Range(.Cells(1, 2), .Cells(65536, 1).End(xlUp).Offset(, 16))
> ↓
>Set rngOrg = .Range(.Cells(2, 9), .Cells(65536, 1).End(xlUp).Offset(, 65))
>
>>.Cells(1, 1).Resize(rngOrg.Rows.Count).Value = rngOrg.Resize(, 1).Offset(, -1).Value
> ↓
>.Cells(2, 1).Resize(rngOrg.Rows.Count).Value = rngOrg.Resize(, 9).Offset(, -8).Value
>
>試してませんので、上手くいかなかったらごめんなさい。

いいえ。成功いたしました。ありがとうございました。
助かりました。
でも一行目の項目がなくて困っていますがどうやって一行目だけ丸ごとコピーしていいけどどこにコード追加しますか?
大変けどどうかよろしくお願いします。

【17149】Re:INDEX関数の繰り返し処理
回答  Asaki  - 04/8/24(火) 0:54 -

引用なし
パスワード
   >でも一行目の項目がなくて困っていますがどうやって一行目だけ丸ごとコピーしていいけどどこにコード追加しますか?
後で処理しようと思っていたら、すっかり忘れていました。

とりあえず、Sheet1の1行目をSheet3の1行目にコピーする作業を、
マクロの記録で記録してみてください。
途中に、
Clear しているところがありますので、その後ろに入れます。

【17150】Re:INDEX関数の繰り返し処理
発言  Asaki  - 04/8/24(火) 0:56 -

引用なし
パスワード
   >途中に、
>Clear しているところがありますので、その後ろに入れます。

先に提示したマクロの途中にある Clear の後に追加、
という意味です。

【17158】Re:INDEX関数の繰り返し処理
質問  さる E-MAIL  - 04/8/24(火) 12:05 -

引用なし
パスワード
   ▼Asaki さん:
ありがとうございます。
また聞きたいことがあって迷惑と思うけど許してくださるようお願いします。
もう少し完成なのでどうかよろしくおねがいします。
コピーの件はやはりエラーを出てしまいやめておきますがもし、あなたが
コピーの構文を追加してくればありがたいと存じます。
さて、追加したいところがありますが
シート3を5つの範囲で合計し、シート4に表示しますがコードを追加しましたが
エラーになるけどどこか悪いでしょうか?
またはいい方法があれば教えてくれませんか?
1.の範囲 (9列-25列)を合計し、シート4(31列)に表示。
2.の範囲 (29列-43列)を合計し、シート4(32列)に表示。
3.の範囲 (44列-54列)を合計し、シート4(33列)に表示。
4.の範囲 (32列-34列)を合計し、シート4(34列)に表示。
5.の範囲 (38列-43列)を合計し、シート4(35列)に表示。

'変換後データ格納セルをクリア、セル範囲を変数に設定
  '項目名コピー
  With Worksheets("シート3")
    Set rngRes = .Range(rngOrg.Address)
   
    .UsedRange.Clear
  
   ActiveSheet.Paste
    .Cells(2, 1).Resize(rngOrg.Rows.Count).Value = rngOrg.Resize(, 9).Offset(, -8).Value
    
    For k = 2 To Range("A65536").End(xlUp).row
     Worksheets("シート4").Cells(k, 31).Value = WorksheetFunction = "=Sum(Range(Cells(k, 9), Cells(i, 25))"
     Worksheets("シート4").Cells(k, 32).Value = WorksheetFunction = "=Sum(Range(Cells(k, 29), Cells(i, 43))"
     Worksheets("シート4").Cells(k, 33).Value = WorksheetFunction = "=Sum(Range(Cells(k, 44), Cells(i, 54))"
     Worksheets("シート4").Cells(k, 34).Value = WorksheetFunction = "=Sum(Range(Cells(k, 32), Cells(i, 34))"
     Worksheets("シート4").Cells(k, 35).Value = WorksheetFunction = "=Sum(Range(Cells(k, 38), Cells(i, 43))"
     Next k
  End With

【17162】Re:INDEX関数の繰り返し処理
回答  Asaki  - 04/8/24(火) 12:35 -

引用なし
パスワード
   >コピーの件はやはりエラーを出てしまいやめておきますがもし、あなたが
>コピーの構文を追加してくればありがたいと存じます。
お断りします。
あくまでも、プログラムを作るのは さる さんです。
どんなプログラムを書いて、何のエラーがでたのでしょうか?
マクロの記録は試しましたか?

>エラーになるけどどこか悪いでしょうか?
>     Worksheets("シート4").Cells(k, 31).Value = WorksheetFunction = "=Sum(Range(Cells(k, 9), Cells(i, 25))"
イコールが複数あるのがおかしいです。
また、こういうときは、WorksheetFunction は使いません。
前に似たようなことをやったのでは?
http://www.vbalab.net/vbaqa/c-board.cgi?cmd=ntr;tree=16981;id=excel

【17192】Re:INDEX関数の繰り返し処理
質問  さる E-MAIL  - 04/8/24(火) 17:50 -

引用なし
パスワード
   ▼Asaki さん:
>>コピーの件はやはりエラーを出てしまいやめておきますがもし、あなたが
>>コピーの構文を追加してくればありがたいと存じます。
>お断りします。
>あくまでも、プログラムを作るのは さる さんです。
>どんなプログラムを書いて、何のエラーがでたのでしょうか?
>マクロの記録は試しましたか?
>
>>エラーになるけどどこか悪いでしょうか?
>>     Worksheets("シート4").Cells(k, 31).Value = WorksheetFunction = "=Sum(Range(Cells(k, 9), Cells(i, 25))"
>イコールが複数あるのがおかしいです。
>また、こういうときは、WorksheetFunction は使いません。
>前に似たようなことをやったのでは?
>http://www.vbalab.net/vbaqa/c-board.cgi?cmd=ntr;tree=16981;id=excel

申し訳はありませんでした。
コピーの件 自分で考えて作ります。今マクロ記録が出来ない状態です。何回も押しても記録できないです。原因は分かりません。

前回の質問についてにあなたの参考を取って作りましたがエラー出るけどどこか悪いでしょうか?

「アプリケーション定義またはオブジェクト定義のエラーです。」

    Dim sutoA As Range
    Dim sutoB As Range
    Dim sutoC As Range
    Dim sutoD As Range
    Dim sutoE As Range
    For k = 2 To Range("A65536").End(xlUp).row
    Set sutoA = .Range("I" & k & ":Y " & k)
    Set sutoB = .Range("AC" & k & ":AQ" & k)
    Set sutoC = .Range("AR" & k & ":BB" & k)
    Set sutoD = .Range("AF" & k & ":AH" & k)
    Set sutoE = .Range("AL" & k & ":AQ" & k)
    a = Application.WorksheetFunction.Sum(sutoA)
    b = Application.WorksheetFunction.Sum(sutoB)
    s = Application.WorksheetFunction.Sum(sutoC)
    d = Application.WorksheetFunction.Sum(sutoD)
    e = Application.WorksheetFunction.Sum(sutoE)
     Worksheets("全体データ").Cells(k, 31).Value = a
     Worksheets("全体データ").Cells(k, 32).Value = b
     Worksheets("全体データ").Cells(k, 33).Value = s
     Worksheets("全体データ").Cells(k, 34).Value = d
     Worksheets("全体データ").Cells(k, 35).Value = e
     Next k
  End With

【17220】Re:INDEX関数の繰り返し処理
質問  さる E-MAIL  - 04/8/24(火) 22:42 -

引用なし
パスワード
   しつこくて申し訳はありませんでした。
コピーの件 再起動してみたらマクロ記憶作動できました。 
RangeクラスのSelectメソッドが失敗しました。とエラー表示を出るけどどこか悪いでしょうか?
Sheets("シート1").Range("A1:BM1").Select
    Selection.Copy
    Sheets("シート3").Select
    Range("A1").Select
    ActiveSheet.Paste


前回の質問についてにあなたの参考を取って作りましたがエラー出るけどどこか悪いでしょうか?

「アプリケーション定義またはオブジェクト定義のエラーです。」

    Dim sutoA As Range
    Dim sutoB As Range
    Dim sutoC As Range
    Dim sutoD As Range
    Dim sutoE As Range
  With WorkSheets("シート3")
    For k = 2 To Range("A65536").End(xlUp).row
    Set sutoA = .Range("I" & k & ":Y " & k)
    Set sutoB = .Range("AC" & k & ":AQ" & k)
    Set sutoC = .Range("AR" & k & ":BB" & k)
    Set sutoD = .Range("AF" & k & ":AH" & k)
    Set sutoE = .Range("AL" & k & ":AQ" & k)
    a = Application.WorksheetFunction.Sum(sutoA)
    b = Application.WorksheetFunction.Sum(sutoB)
    s = Application.WorksheetFunction.Sum(sutoC)
    d = Application.WorksheetFunction.Sum(sutoD)
    e = Application.WorksheetFunction.Sum(sutoE)
     Worksheets("シート4").Cells(k, 31).Value = a
     Worksheets("シート4").Cells(k, 32).Value = b
     Worksheets("シート4").Cells(k, 33).Value = s
     Worksheets("シート4").Cells(k, 34).Value = d
     Worksheets("シート4").Cells(k, 35).Value = e
     Next k
  End With
方法は正しいですか?
私の頭がまた理解できていないですのでどうかアドバイスお願いします。
本では参考載せていませんから理解しにくいです。

【17221】Re:INDEX関数の繰り返し処理
お礼  さる E-MAIL  - 04/8/24(火) 23:03 -

引用なし
パスワード
   ▼Asaki さん:
コピーの件 参考書を読んで実行したら成功しました。
ありがとうございました。

Worksheets("シート1").Range("A1:BM1").Copy
ActiveSheet.Paste Destination:=Sheets("シート3").Range("A1")


後はSUMの件ですがいろいろの本を探して見ます。これから本屋へ行く予定です。
もし参考書がなければどうかあなたからご指南お願いします。

【17224】Re:INDEX関数の繰り返し処理
回答  Asaki  - 04/8/25(水) 0:35 -

引用なし
パスワード
   エラーの原因は、
>For k = 2 To Range("A65536").End(xlUp).row
この、Range() の前に ピリオドが足りないせいでしょうか。

あと、row って、小文字になっていますが、row という名前の変数を宣言していたりしませんか?
もしそうなら、別の名前にしたほうが良いです。

さて、5つのSum() を地道に書いても良いのですが、配列が使えそうなので、配列を利用してみます。
内容がわからなければ、ヘルプを読んだり、再度質問したりしてください。

Sub test()
  Dim k      As Long
  Dim c(1 To 5)  As Range
  Dim i      As Long
  Dim j      As Long
  Dim v      As Variant
  
  With Worksheets("シート3")
    Set c(1) = .Range("I2:Y2")
    Set c(2) = .Range("AC2:AQ2")
    Set c(3) = .Range("AR2:BB2")
    Set c(4) = .Range("AF2:AH2")
    Set c(5) = .Range("AL2:AQ2")

    For k = 2 To .Range("A65536").End(xlUp).Row
      i = k - 2
      For j = 1 To 5
        v = Application.Sum(c(j).Offset(i))
        If IsError(v) Then v = 0
        Worksheets("シート4").Cells(k, j + 30).Value = v
      Next j
    Next k
  End With

End Sub

コピーは上手くいってよかったですね。

【17248】Re:INDEX関数の繰り返し処理
質問  さる E-MAIL  - 04/8/25(水) 17:56 -

引用なし
パスワード
   ▼Asaki さん:
ありがとうございました。
成功いたしましたけどシート4に一行目が合計した数を表示してしまった。
2行目から表示したいけどどこに追加しますか?
よろしくお願いします。
row変数したらしい?探してみますから変更いたします。
アドバイスありがとうございました。

>Sub test()
>  Dim k      As Long
>  Dim c(1 To 5)  As Range
>  Dim i      As Long
>  Dim j      As Long
>  Dim v      As Variant
>  
>  With Worksheets("シート3")
>    Set c(1) = .Range("I2:Y2")
>    Set c(2) = .Range("AC2:AQ2")
>    Set c(3) = .Range("AR2:BB2")
>    Set c(4) = .Range("AF2:AH2")
>    Set c(5) = .Range("AL2:AQ2")
>
>    For k = 2 To .Range("A65536").End(xlUp).Row
>      i = k - 2
>      For j = 1 To 5
>        v = Application.Sum(c(j).Offset(i))
>        If IsError(v) Then v = 0
>        Worksheets("シート4").Cells(k, j + 30).Value = v
>      Next j
>    Next k
>  End With
>
>End Sub
>

【17251】Re:INDEX関数の繰り返し処理
回答  Asaki  - 04/8/25(水) 18:18 -

引用なし
パスワード
   >成功いたしましたけどシート4に一行目が合計した数を表示してしまった。
>2行目から表示したいけどどこに追加しますか?
こちらで試す限りは2行目の合計はシート4の2行目に表示されますが。

どこか変更されましたか?

【17261】Re:INDEX関数の繰り返し処理
質問  さる E-MAIL  - 04/8/25(水) 23:19 -

引用なし
パスワード
   ▼Asaki さん:
>>成功いたしましたけどシート4に一行目が合計した数を表示してしまった。
>>2行目から表示したいけどどこに追加しますか?
>こちらで試す限りは2行目の合計はシート4の2行目に表示されますが。
>
>どこか変更されましたか?


ごめんなさい。大変申し訳はありませんでした。
3行目から表示したいです。
どこに追加しますか?教えて下さい。

【17262】Re:INDEX関数の繰り返し処理
回答  Asaki  - 04/8/25(水) 23:25 -

引用なし
パスワード
   >3行目から表示したいです。
>どこに追加しますか?教えて下さい。
プログラムの意味はお分かりですか?
全ての行で何をしているか説明できますか?
解らなければヘルプを調べてみてください。
また、ステップ実行して、1行ずつ処理を追いかけると、少し解りやすいかもしれません。

とりあえず、2 と書いてあるところが変更候補ですが、
実データと見比べて、必要な部分だけ修正することになります。

【17264】Re:INDEX関数の繰り返し処理
お礼  さる E-MAIL  - 04/8/25(水) 23:43 -

引用なし
パスワード
   ▼Asaki さん:
>>3行目から表示したいです。
>>どこに追加しますか?教えて下さい。
>プログラムの意味はお分かりですか?
>全ての行で何をしているか説明できますか?
>解らなければヘルプを調べてみてください。
>また、ステップ実行して、1行ずつ処理を追いかけると、少し解りやすいかもしれません。
>
>とりあえず、2 と書いてあるところが変更候補ですが、
>実データと見比べて、必要な部分だけ修正することになります。

錯誤試行してみてやっと意味がつかめました。ありがとうございました。

Worksheets("全体データ").Cells(k + 1, j + 30).Value = v
K+1すれば2行目に3行目から始まるわけでしょう?
実行してみたら成功いたしました。
ありがとうございました。
やっと完成できました。あなたのおかげです。
私の成長もひとつ出来たし、これからもわからないところがあれば
ご指南お願いいたします。
ありがとうございました。

Sub 試験()

  Dim k      As Long
  Dim c(1 To 5)  As Range
  Dim i      As Long
  Dim j      As Long
  Dim v      As Variant
 
  With Worksheets("ストレスポイント")
    Set c(1) = .Range("I2:Y2")
    Set c(2) = .Range("AC2:AQ2")
    Set c(3) = .Range("AR2:BB2")
    Set c(4) = .Range("AF2:AH2")
    Set c(5) = .Range("AL2:AQ2")

    For k = 2 To .Range("A65536").End(xlUp).row
      i = k - 2
      For j = 1 To 5
        v = Application.Sum(c(j).Offset(i))
        If IsError(v) Then v = 0
        Worksheets("全体データ").Cells(k + 1, j + 30).Value = v
      Next j
    Next k
  End With

End Sub

11240 / 13646 ツリー ←次へ | 前へ→
ページ:  ┃  記事番号:
2610219
(SS)C-BOARD v3.8 is Free