Excel VBA質問箱 IV

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

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


47352 / 76732 ←次へ | 前へ→

【34337】Re:空欄に数字を補完するコードを単純に書き換えたい
発言  [名前なし]  - 06/1/31(火) 21:48 -

引用なし
パスワード
   ▼ちくたく さん:
>もっと、単純な書き方はないかなぁ、と思い、質問させて頂きます。
単純かどうかはわかりませんが、こんなのはどうでしょうか?

Sub Macro1()
Dim MyCol As Range
Dim 増加分 As Single
Dim i As Long, j As Long
Dim Large As Double
Dim Small As Double
Dim LargeRow As Long
Dim SmallRow As Long

  '3行以上なければ数値間の空白セルは存在しないので抜ける
  If ActiveWindow.RangeSelection.Rows.Count < 3 Then Exit Sub
  
  '1列ずつ処理
  For Each MyCol In ActiveWindow.RangeSelection.Columns
    With MyCol
    
      '数値が2個以上なければ数値間の空白セルは存在しないので
      '数値が2個以上なら処理する
      If WorksheetFunction.Count(.Cells) > 1 Then
      
        '数値だけを選択
        With .SpecialCells(xlCellTypeConstants, xlNumbers)
        
          '(範囲数 - 1) 回分繰り返す
          '範囲が1つであれば以下のループは処理されない
          For i = 1 To .Areas.Count - 1
          
            '範囲の最終セル(Aとする)の値と行番号を取得
            With .Areas(i)
              With .Cells(.Cells.Count)
                Small = .Value
                SmallRow = .Row
              End With
            End With
            
            '次の範囲の先頭セル(Bとする)の値と行番号を取得
            With .Areas(i + 1).Cells(1)
                Large = .Value
                LargeRow = .Row
            End With
            
            'A,Bのセルから取得した情報を使用して増加分を算出
            増加分 = (Large - Small) / (LargeRow - SmallRow)
            
            'A,Bのセルの間の数だけ、Aのセルの値に増加分を足した値を出力
            For j = SmallRow + 1 To LargeRow - 1
              Cells(j, .Column).Value = Cells(SmallRow, .Column).Value _
              + Format(増加分 * (j - SmallRow), "0.00")
            Next
          Next
        End With
      End If
    End With
  Next

End Sub


数値だけ選択[SpecialCells(xlCellTypeConstants, xlNumbers)]した場合の範囲

   A
1   1  ←Areas(1).Cells(1) 範囲1の先頭セル
2   2  ←Areas(1).Cells(2) [= Areas(1).Cells(Areas(1).Cells.Count)]範囲1の最終セル
3
4
5   3  ←Areas(2).Cells(1) 範囲2の先頭セル
6   4  ←Areas(2).Cells(2)
7   5  ←Areas(2).Cells(3) [= Areas(2).Cells(Areas(2).Cells.Count)]範囲2の最終セル
8
9   6  ←Areas(3).Cells(1) 範囲3の先頭セル

なので、ある範囲の最終セルと次の範囲の先頭セルを使うようなコードに
してみました。
0 hits

【34272】空欄に数字を補完するコードを単純に書き換えたい ちくたく 06/1/30(月) 10:49 質問
【34275】Re:空欄に数字を補完するコードを単純に書... ちくたく 06/1/30(月) 12:32 発言
【34281】Re:空欄に数字を補完するコードを単純に... 小僧 06/1/30(月) 16:06 発言
【34285】Re:空欄に数字を補完するコードを単純に... ちくたく 06/1/30(月) 16:51 質問
【34287】Re:空欄に数字を補完するコードを単純に... 小僧 06/1/30(月) 18:19 回答
【34288】Re:空欄に数字を補完するコードを単純に... ちくたく 06/1/30(月) 18:39 お礼
【34306】Re:空欄に数字を補完するコードを単純に... 小僧 06/1/31(火) 0:23 回答
【34311】Re:空欄に数字を補完するコードを単純に... ちくたく 06/1/31(火) 9:10 お礼
【34307】Re:空欄に数字を補完するコードを単純に書... ichinose 06/1/31(火) 7:01 発言
【34312】Re:空欄に数字を補完するコードを単純に書... ちくたく 06/1/31(火) 9:14 お礼
【34476】Re:空欄に数字を補完するコードを単純に書... ちくたく 06/2/3(金) 13:12 発言
【34337】Re:空欄に数字を補完するコードを単純に書... [名前なし] 06/1/31(火) 21:48 発言
【34478】Re:空欄に数字を補完するコードを単純に書... ちくたく 06/2/3(金) 13:17 お礼

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