Excel VBA質問箱 IV

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

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


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

【51558】再び質問いたします 初心者かめさん 07/9/25(火) 15:53 質問[未読]
【51560】Re:再び質問いたします じゅんじゅん 07/9/25(火) 16:28 発言[未読]
【51561】Re:再び質問いたします 初心者かめさん 07/9/25(火) 16:39 質問[未読]
【51562】Re:再び質問いたします ハチ 07/9/25(火) 16:45 発言[未読]
【51563】Re:再び質問いたします じゅんじゅん 07/9/25(火) 16:45 発言[未読]
【51564】Re:再び質問いたします 初心者かめさん 07/9/25(火) 16:50 お礼[未読]

【51558】再び質問いたします
質問  初心者かめさん  - 07/9/25(火) 15:53 -

引用なし
パスワード
   こんにちは、またまた初歩的な質問でございます。
私はn行目の値とn+1行目を比較して、
同じなら加算の処理をし、
異なれば複写の処理をするという処理を繰返すVBAがつくりたいのですが、
先日お教え頂いた方法では、
Dim n As Long
  n = 5
を加算にも複写にも入れなければ、エラーになってしまいます。
それではずっとn=5で処理が繰返されるだけなのです。
私は型番集計のところにのみ入れたいのです。
何とか良い方法はないでしょうか?
根本的に作り方がおかしいのでしょうか?
ご指導お願い致します。

Sub 型番集計()
  Dim n As Long
  n = 5
  比較
End Sub

Sub 比較()
  Range("A1").Select
  If "R[2]C[n]" = "R[2]C[n+1]" Then
    加算
  Else
    複写
  End If
End Sub

Sub 加算()
  Dim n As Long
  n = 5
  Range("F5").Select
  ActiveCell.FormulaR1C1 = "=+RC[-2]+R[1]C[-2]"
  Range("F6").Select
  Range(Cells(n, "A"), Cells(n, "F")).Select
  Selection.Copy
  Range(Cells(n, "G")).Select
  ActiveSheet.Paste
  Cells(10, n).Value = F5
  n = n + 1
  比較
End Sub

Sub 複写()
  Dim n As Long
  n = 5
  Range("a1").Select
  Range(Cells(n, "A"), Cells(n, "F")).Select
  Selection.Copy
  Range(Cells(n, "g"), Cells(n, "g")).Select
  ActiveSheet.Paste
  If n > 100 Then
    Range("a1").Select
  Else
    n = n + 1
    比較
  End If
End Sub

【51560】Re:再び質問いたします
発言  じゅんじゅん  - 07/9/25(火) 16:28 -

引用なし
パスワード
   ▼初心者かめさん さん:
>こんにちは、またまた初歩的な質問でございます。
>私はn行目の値とn+1行目を比較して、
>同じなら加算の処理をし、
>異なれば複写の処理をするという処理を繰返すVBAがつくりたいのですが、
>先日お教え頂いた方法では、
>Dim n As Long
>  n = 5
>を加算にも複写にも入れなければ、エラーになってしまいます。
>それではずっとn=5で処理が繰返されるだけなのです。

>Dim n As Long
外で1回宣言したら?

新しいSheetでセルA1〜A10に適当に数値を入れて、

Dim n As Long 'こんな感じで

Sub test()
 For n = 1 To 9
   If Range("A" & n).Value = Range("A" & n + 1).Value Then
     bb
   Else
     cc
   End If
 Next
End Sub

Sub bb()
  MsgBox "BB " & n 'n行とn+1行の値が同じ時
End Sub

Sub cc()
  MsgBox "CC " & n 'n行とn+1行の値が違う時
End Sub

こんな感じかな?

その都度宣言して、n=5を実行しているから変わらないのでしょ。

【51561】Re:再び質問いたします
質問  初心者かめさん  - 07/9/25(火) 16:39 -

引用なし
パスワード
   じゅんじゅんさん,ありがとうございます。
ただ、複写の処理で、Aのn行目、Fのn行目を指定する場合は
どうすればよいのでしょうか?
  Range("a1").Select
  Range(Cells(n, "A"), Cells(n, "F")).Select
  Selection.Copy
  Range(Cells(n, "g"), Cells(n, "g")).Select
  ActiveSheet.Paste
の部分です。

【51562】Re:再び質問いたします
発言  ハチ  - 07/9/25(火) 16:45 -

引用なし
パスワード
   ▼初心者かめさん さん:
>じゅんじゅんさん,ありがとうございます。
>ただ、複写の処理で、Aのn行目、Fのn行目を指定する場合は
>どうすればよいのでしょうか?
>  Range("a1").Select
>  Range(Cells(n, "A"), Cells(n, "F")).Select
>  Selection.Copy
>  Range(Cells(n, "g"), Cells(n, "g")).Select
>  ActiveSheet.Paste
>の部分です。

このあたりが参考になるのでは?
www.asahi-net.or.jp/~ef2o-inue/vba_k/sub04_200_100.html

「VBA 引数」くらいでググればたくさんヒットしますので、
気にいるサイトを探してみてください。

【51563】Re:再び質問いたします
発言  じゅんじゅん  - 07/9/25(火) 16:45 -

引用なし
パスワード
   ▼初心者かめさん さん:
>じゅんじゅんさん,ありがとうございます。
>ただ、複写の処理で、Aのn行目、Fのn行目を指定する場合は
>どうすればよいのでしょうか?
>  Range("a1").Select
>  Range(Cells(n, "A"), Cells(n, "F")).Select
>  Selection.Copy
>  Range(Cells(n, "g"), Cells(n, "g")).Select
>  ActiveSheet.Paste
>の部分です。

コピー元は範囲で指定。
コピー先は範囲の左上を指定。
よって、
>  Range(Cells(n, "g"), Cells(n, "g")).Select
   Range("g" & n).Select

   Cells(n, "g").Select
ではどうですか?

【51564】Re:再び質問いたします
お礼  初心者かめさん  - 07/9/25(火) 16:50 -

引用なし
パスワード
   ハチさん
じゅんじゅんさん
ありがとうございます。
初心者なので、よちよち、よちよち、迷子になりながらの作業です。
くじけずがんばります。

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