Excel VBA質問箱 IV

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

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


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

【16941】処理の繰り返しを教えてください。 takenoko 04/8/16(月) 21:42 質問[未読]
【16943】Re:処理の繰り返しを教えてください。 初心者 04/8/16(月) 22:57 回答[未読]
【16975】Re:処理の繰り返しを教えてください。 takenoko 04/8/17(火) 21:56 質問[未読]
【16977】Re:処理の繰り返しを教えてください。 IROC 04/8/17(火) 22:30 回答[未読]
【16980】Re:処理の繰り返しを教えてください。 初心者 04/8/17(火) 23:44 回答[未読]
【16946】Re:処理の繰り返しを教えてください。 Asaki 04/8/16(月) 23:14 回答[未読]
【16950】Re:処理の繰り返しを教えてください。 IROC 04/8/17(火) 8:44 回答[未読]
【16976】Re:処理の繰り返しを教えてください。 takenoko 04/8/17(火) 22:30 質問[未読]
【16982】Re:処理の繰り返しを教えてください。 Asaki 04/8/17(火) 23:52 回答[未読]
【17016】Re:処理の繰り返しを教えてください。 takenoko 04/8/18(水) 20:46 お礼[未読]

【16941】処理の繰り返しを教えてください。
質問  takenoko E-MAIL  - 04/8/16(月) 21:42 -

引用なし
パスワード
   このページを見つけ、凄い方々がいらっしゃるのだと驚きました。
私の質問を聞いていただけたら幸いです。
次のように列項目
売上高 材料原価 付加価値
10000  2000
20000  2500
30000  3000
40000  3000 
              がありこのようにレコードが数十行あります。

隣の項目に付加価値(=売上高ー材料原価)を売上高の列に数字があるだけ
マクロで計算させたいのです。つまり売上高、材料原価が空欄になるまで
計算をさせたいのです。ただし、列数は変わりませんが毎回レコード数は変動します。
何か良い案がありましたらご指導お願いいたします。


  

【16943】Re:処理の繰り返しを教えてください。
回答  初心者 E-MAIL  - 04/8/16(月) 22:57 -

引用なし
パスワード
   こんばんわ。こんなのでどうでしょう??

Sub TEST()
  Cells(2, 3).Select
  ActiveCell.FormulaR1C1 = "=RC[-2]-RC[-1]"
  
  Do Until ActiveCell.Offset(, -1).Value = ""

  With ActiveCell
 .Offset(1).Select
  .Formula = "=RC[-2]-RC[-1]"

  End With
 Loop
 
End Sub


▼takenoko さん:
>このページを見つけ、凄い方々がいらっしゃるのだと驚きました。
>私の質問を聞いていただけたら幸いです。
>次のように列項目
>売上高 材料原価 付加価値
>10000  2000
>20000  2500
>30000  3000
>40000  3000 
>              がありこのようにレコードが数十行あります。
>
>隣の項目に付加価値(=売上高ー材料原価)を売上高の列に数字があるだけ
>マクロで計算させたいのです。つまり売上高、材料原価が空欄になるまで
>計算をさせたいのです。ただし、列数は変わりませんが毎回レコード数は変動します。
>何か良い案がありましたらご指導お願いいたします。
>
>
>

【16946】Re:処理の繰り返しを教えてください。
回答  Asaki  - 04/8/16(月) 23:14 -

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

タイトルが1行目で、A1から始まっているとして、
↓のような感じでは如何でしょうか?

Sub test()
  With Range(Cells(2, 1), Cells(65536, 1).End(xlUp))
    .Offset(, 2).Value _
      = Evaluate(.Address(, , Application.ReferenceStyle) _
      & "-" & .Offset(, 1).Address(, , Application.ReferenceStyle))
  End With
End Sub

【16950】Re:処理の繰り返しを教えてください。
回答  IROC  - 04/8/17(火) 8:44 -

引用なし
パスワード
   基本的な方法です。1行ずつループ処理します。

>Range("A65536").End(xlUp).Row
で最下行を求めてます。


Sub Sample1()
Dim i As Long

  For i = 2 To Range("A65536").End(xlUp).Row
    Cells(i, 3).Value = Cells(i, 1).Value - Cells(i, 2).Value
  Next i

End Sub

【16975】Re:処理の繰り返しを教えてください。
質問  takenoko  - 04/8/17(火) 21:56 -

引用なし
パスワード
   ご解答ありがとうございました。
参考にさせていただきうまく機能いたしました。
今回のことで質問なのですが
With ActiveCell
 .Offset(1).Select
 .Formula = "=RC[-2]-RC[-1]"
のところでなぜピリオドから始まっているのでしょうか?
あまり知識がないもので非常に不思議に思っているのですが
もしお時間がありましたらご指導お願い致します。


▼初心者 さん:
>こんばんわ。こんなのでどうでしょう??
>
>Sub TEST()
>  Cells(2, 3).Select
>  ActiveCell.FormulaR1C1 = "=RC[-2]-RC[-1]"
>  
>  Do Until ActiveCell.Offset(, -1).Value = ""
>
>  With ActiveCell
> .Offset(1).Select
>  .Formula = "=RC[-2]-RC[-1]"
>
>  End With
> Loop
> 
>End Sub
>
>
>▼takenoko さん:
>>このページを見つけ、凄い方々がいらっしゃるのだと驚きました。
>>私の質問を聞いていただけたら幸いです。
>>次のように列項目
>>売上高 材料原価 付加価値
>>10000  2000
>>20000  2500
>>30000  3000
>>40000  3000 
>>              がありこのようにレコードが数十行あります。
>>
>>隣の項目に付加価値(=売上高ー材料原価)を売上高の列に数字があるだけ
>>マクロで計算させたいのです。つまり売上高、材料原価が空欄になるまで
>>計算をさせたいのです。ただし、列数は変わりませんが毎回レコード数は変動します。
>>何か良い案がありましたらご指導お願いいたします。
>>
>>
>>

【16976】Re:処理の繰り返しを教えてください。
質問  takenoko  - 04/8/17(火) 22:30 -

引用なし
パスワード
   ご解答ありがとうございました。
ご指導を参考に試してみたところうまく機能いたしました。
今回のことで一点お聞きしたいところがあります。
Range("A65536").End(xlUp).Row
のところが最下行を求めるとのことですが
この意味は65536行が最下行となることを意味しているのでしょうか?
あまり知識がなく教えていただければ幸いです。
宜しくお願い致します。


▼IROC さん:
>基本的な方法です。1行ずつループ処理します。
>
>>Range("A65536").End(xlUp).Row
>で最下行を求めてます。
>
>
>Sub Sample1()
>Dim i As Long
>
>  For i = 2 To Range("A65536").End(xlUp).Row
>    Cells(i, 3).Value = Cells(i, 1).Value - Cells(i, 2).Value
>  Next i
>
>End Sub

【16977】Re:処理の繰り返しを教えてください。
回答  IROC  - 04/8/17(火) 22:30 -

引用なし
パスワード
   With文によるものです。

詳しくはヘルプを読んでみて下さい。

【16980】Re:処理の繰り返しを教えてください。
回答  初心者 E-MAIL  - 04/8/17(火) 23:44 -

引用なし
パスワード
   返信遅くなりました。

.Offset(1).Select
.Formula = "=RC[-2]-RC[-1]"
の前の"With ActiveCell"でActiveCellを省略しています。
何度も同じコマンドを使う時、With〜で省略できるそうです。
その場合、"end with"を最後に入れます。

▼takenoko さん:
>ご解答ありがとうございました。
>参考にさせていただきうまく機能いたしました。
>今回のことで質問なのですが
>With ActiveCell
> .Offset(1).Select
> .Formula = "=RC[-2]-RC[-1]"
>のところでなぜピリオドから始まっているのでしょうか?
>あまり知識がないもので非常に不思議に思っているのですが
>もしお時間がありましたらご指導お願い致します。
>
>
>▼初心者 さん:
>>こんばんわ。こんなのでどうでしょう??
>>
>>Sub TEST()
>>  Cells(2, 3).Select
>>  ActiveCell.FormulaR1C1 = "=RC[-2]-RC[-1]"
>>  
>>  Do Until ActiveCell.Offset(, -1).Value = ""
>>
>>  With ActiveCell
>> .Offset(1).Select
>>  .Formula = "=RC[-2]-RC[-1]"
>>
>>  End With
>> Loop
>> 
>>End Sub
>>
>>
>>▼takenoko さん:
>>>このページを見つけ、凄い方々がいらっしゃるのだと驚きました。
>>>私の質問を聞いていただけたら幸いです。
>>>次のように列項目
>>>売上高 材料原価 付加価値
>>>10000  2000
>>>20000  2500
>>>30000  3000
>>>40000  3000 
>>>              がありこのようにレコードが数十行あります。
>>>
>>>隣の項目に付加価値(=売上高ー材料原価)を売上高の列に数字があるだけ
>>>マクロで計算させたいのです。つまり売上高、材料原価が空欄になるまで
>>>計算をさせたいのです。ただし、列数は変わりませんが毎回レコード数は変動します。
>>>何か良い案がありましたらご指導お願いいたします。
>>>
>>>
>>>

【16982】Re:処理の繰り返しを教えてください。
回答  Asaki  - 04/8/17(火) 23:52 -

引用なし
パスワード
   >Range("A65536").End(xlUp).Row
セル A65536 を選択して、Ctrl+↑の操作をしたときに選択される行番号を
取得する処理です。

A列に、データが最終行まで途切れず入力されている場合は、
Range("A1").End(xlDown).Row
でも最終行番号になります。
このときは、A1を選択した状態で、Ctrl+↓の操作に該当します。

【17016】Re:処理の繰り返しを教えてください。
お礼  takenoko  - 04/8/18(水) 20:46 -

引用なし
パスワード
   初心者さん
IROCさん
Asakiさん
いろいろ御指導ありがとうございました。
今回教えていただいたことを参考にうまく機能させることができ
大変感謝しております。
今後も宜しくお願い致します。

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