Excel VBA質問箱 IV

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

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


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

【63082】縦方向の制御方法について Masato真 09/10/5(月) 22:12 質問[未読]
【63085】Re:縦方向の制御方法について りん 09/10/6(火) 7:56 発言[未読]
【63089】Re:縦方向の制御方法について Masato真 09/10/6(火) 21:43 質問[未読]
【63090】Re:縦方向の制御方法について 一言居士 09/10/7(水) 7:14 発言[未読]
【63105】Re:縦方向の制御方法について Masato真 09/10/8(木) 21:26 質問[未読]
【63107】Re:縦方向の制御方法について 一言居士 09/10/8(木) 22:11 回答[未読]
【63135】Re:縦方向の制御方法について りん 09/10/10(土) 11:57 発言[未読]
【63136】Re:縦方向の制御方法について 一言居士 09/10/10(土) 12:10 発言[未読]
【63192】Re:縦方向の制御方法について Masato真 09/10/14(水) 22:05 お礼[未読]

【63082】縦方向の制御方法について
質問  Masato真  - 09/10/5(月) 22:12 -

引用なし
パスワード
   こんばんは、
 
 マクロの勉強中ですので、よろしくお願いします。
 あるデータの範囲はA1:Q6となっている(A1:A17はタイトルです)。
小計を自動的に計算するため、試しにマクロを記録し、実行したところで、きちんとA列の値に基づき、並べ替えられて、そして、Q列小計の計算ができました。
質問:データの横方向の列増減はないですが、縦方向のデータはよく変わります。
   これを対応するには、どのように修正すれば、よいでしょうか?

Sub TEST001()
Range("A2:Q6").Select
ActiveWorkbook.Worksheets("Sheet1").Sort.SortFields.Clear
ActiveWorkbook.Worksheets("Sheet1").Sort.SortFields.Add Key:=Range("A2:A6"), _
SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal
With ActiveWorkbook.Worksheets("Sheet1").Sort
  .SetRange Range("A1:Q6")
  .Header = xlYes
  .MatchCase = False
  .Orientation = xlTopToBottom
  .SortMethod = xlPinYin
  .Apply
End With
 Range("I3").Select
 Selection.Subtotal GroupBy:=1, Function:=xlSum, TotalList:=Array(17), _
 Replace:=True, PageBreaks:=False, SummaryBelowData:=True
End Sub

【63085】Re:縦方向の制御方法について
発言  りん E-MAIL  - 09/10/6(火) 7:56 -

引用なし
パスワード
   ▼Masato真 さん:
>こんばんは、
> 
> マクロの勉強中ですので、よろしくお願いします。
> あるデータの範囲はA1:Q6となっている(A1:A17はタイトルです)。
>小計を自動的に計算するため、試しにマクロを記録し、実行したところで、きちんとA列の値に基づき、並べ替えられて、そして、Q列小計の計算ができました。
>質問:データの横方向の列増減はないですが、縦方向のデータはよく変わります。
>   これを対応するには、どのように修正すれば、よいでしょうか?

一番下の行を取得する例
htt p://www.vbalab.net/vbaqa/c-board.cgi?cmd=one;no=61543;id=excel


Key:=Range("A2:A6"), _
.SetRange Range("A1:Q6")

この二つのRangeを

最下行の番号を変数Rmaxに格納するとして、手っ取り早いのは、
Key:=Range("A2:A" & Rmax), _
.SetRange Range("A1:Q" & Rmax)

ですかね。

【63089】Re:縦方向の制御方法について
質問  Masato真  - 09/10/6(火) 21:43 -

引用なし
パスワード
   りん さん

 やってみましたが、なんかエラー400がでました。どこにまちっがているか
教えていただけませんか?

Sub TEST001()
Range("A2:Q6").Select
ActiveWorkbook.Worksheets("Sheet1").Sort.SortFields.Clear
ActiveWorkbook.Worksheets("Sheet1").Sort.SortFields.Add Key:=Range("A2:A" & Rmax), _
SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal
With ActiveWorkbook.Worksheets("Sheet1").Sort
  .SetRange Range("A1:Q" & Rmax)
  .Header = xlYes
  .MatchCase = False
  .Orientation = xlTopToBottom
  .SortMethod = xlPinYin
  .Apply
End With
 Range("I3").Select
 Selection.Subtotal GroupBy:=1, Function:=xlSum, TotalList:=Array(17), _
 Replace:=True, PageBreaks:=False, SummaryBelowData:=True
End Sub

【63090】Re:縦方向の制御方法について
発言  一言居士  - 09/10/7(水) 7:14 -

引用なし
パスワード
   いきなり登場した"Rmax"って何者ですか?
りん さんの書かれている
>最下行の番号を変数Rmaxに格納するとして、
という処理がどこにもないようですが・・・。

【63105】Re:縦方向の制御方法について
質問  Masato真  - 09/10/8(木) 21:26 -

引用なし
パスワード
   一言居士さん
 
 以下の三か所に修正しました。どこに間違っているかをお願いします。

Sub TEST001()
Range("A1:Q" & Rmax).Select  ==>修正分
ActiveWorkbook.Worksheets("Sheet1").Sort.SortFields.Clear
ActiveWorkbook.Worksheets("Sheet1").Sort.SortFields.Add Key:=Range("A2:A" & Rmax), _  ==>修正分
SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal
With ActiveWorkbook.Worksheets("Sheet1").Sort
  .SetRange Range("A1:Q" & Rmax)  ==>修正分
  .Header = xlYes
  .MatchCase = False
  .Orientation = xlTopToBottom
  .SortMethod = xlPinYin
  .Apply
End With
 Range("I3").Select
 Selection.Subtotal GroupBy:=1, Function:=xlSum, TotalList:=Array(17), _
 Replace:=True, PageBreaks:=False, SummaryBelowData:=True
End Sub

【63107】Re:縦方向の制御方法について
回答  一言居士  - 09/10/8(木) 22:11 -

引用なし
パスワード
   コード全体については、詳細に見ていないのですが、
何よりもまず、"Rmax"という変数に具体的な数値が
代入されていないことが気になりましたので、
一言申し上げました。
"Rmax"というのは、最終行の行No.を代入するための
変数だと思いますので、最終行の行No.を取得して
代入してやる作業が必要です。
現状では、"Rmax"の値は”0"になっているはずです。

【63135】Re:縦方向の制御方法について
発言  りん E-MAIL  - 09/10/10(土) 11:57 -

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

一言居士さん、お手数おかけします。

>"Rmax"というのは、最終行の行No.を代入するための
>変数だと思いますので、最終行の行No.を取得して
>代入してやる作業が必要です。
>現状では、"Rmax"の値は”0"になっているはずです。

最初に書いたヒントのリンク先(といってもこの掲示板の事情でアドレスは繋がってませんが)の回答の、

>↓最下行を選択する
> Range("F" & Rows.Count).End(xlUp).Select

これを踏まえて、

Rmax = Range("A" & Rows.Count).End(xlUp).Row
これでA列の最下行が取得できます。

【63136】Re:縦方向の制御方法について
発言  一言居士  - 09/10/10(土) 12:10 -

引用なし
パスワード
   >Rmax = Range("A" & Rows.Count).End(xlUp).Row
>これでA列の最下行が取得できます。

そういうことだったのですね。
パッと見だけで軽率な発言をしてしまい、
かえってmasato真さんを惑わしてしまうことになってしまいました。
お詫び申しあげます。

りん様

ご指摘ありがとうございます。
りん様にまで余計なお手間を取らせてしまいました。
申し訳ありません。

【63192】Re:縦方向の制御方法について
お礼  Masato真  - 09/10/14(水) 22:05 -

引用なし
パスワード
   一言居士さん、りんさん
 
 ご回答いただき、ありがとうございました。

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