Excel VBA質問箱 IV

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

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


2573 / 13645 ツリー ←次へ | 前へ→

【67151】ブランクセル群のすぐ左隣にあるセル群の数値を合計した値が欲しい。 リス 10/11/10(水) 19:26 質問[未読]
【67152】Re:ブランクセル群のすぐ左隣にあるセル群... Hirofumi 10/11/10(水) 19:50 発言[未読]
【67153】Re:ブランクセル群のすぐ左隣にあるセル群... リス 10/11/10(水) 20:43 発言[未読]
【67154】Re:ブランクセル群のすぐ左隣にあるセル群... Hirofumi 10/11/10(水) 22:32 発言[未読]
【67156】お礼 リス 10/11/11(木) 19:05 お礼[未読]
【67155】Re:ブランクセル群のすぐ左隣にあるセル群... ichinose 10/11/11(木) 7:16 発言[未読]
【67157】お礼 リス 10/11/11(木) 19:07 お礼[未読]

【67151】ブランクセル群のすぐ左隣にあるセル群の...
質問  リス  - 10/11/10(水) 19:26 -

引用なし
パスワード
   環境:Windows XP Home Edition EXCEL 2003

お世話になります。

A列には、任意の数字が入っており、列中にブランクはありません。
B列には、任意の数字が入っており、かつ列中にブランクがあります。

  |A| |B |
1  | 2||15 |
2  | 5||10 |
3  | 3||20 |
4  | 1||" "| →ブランク
5  | 2||" "| →ブランク
6  | 4||10 |
7  | 6||25 |

B列に1個、又は1個以上で且つ連続したブランクセル""が存在する場合
ブランクセル(連続している行の全て)の
1.すぐ左隣のセル(群)の値
2.すぐ左隣のセル(群)の一つ上のセルの値 
  を合計した値を取得したいです。

例えば、表ですと

B4とB5が1個以上の連続したブランクセルなので
すぐ左隣のセル群=A4とA5 →値は 1 と 2
すぐ左隣のセル群(=A4とA5)の一つ上のセル=A3 →値は  3
で 1+2+3 = 6 という値を取得したいのです。

(条件)ここまでのコードの流れで、出現した1個目の
ブランクセルの列数を変数:j に代入している状態です。
例えば、表ではB4セルが1個目のブランクセルなので 
変数:j に 4 が格納されています。

よって、変数 j から参照する形で、上記の欲しい値を
取得できればと考えています。

下記まで書いて、行き詰まりました。

Range("B" & j), Range("B" & j).End(xldown))              .SpecialCells(xlCellTypeBlanks).Offset(0,-1)


恐れ入りますが、どなたかご指導頂けないでしょうか。

【67152】Re:ブランクセル群のすぐ左隣にあるセル...
発言  Hirofumi  - 10/11/10(水) 19:50 -

引用なし
パスワード
   ▼リス さん:
>環境:Windows XP Home Edition EXCEL 2003
>
>お世話になります。
>
>A列には、任意の数字が入っており、列中にブランクはありません。
>B列には、任意の数字が入っており、かつ列中にブランクがあります。
>
>  |A| |B |
>1  | 2||15 |
>2  | 5||10 |
>3  | 3||20 |
>4  | 1||" "| →ブランク
>5  | 2||" "| →ブランク
>6  | 4||10 |
>7  | 6||25 |
>
>B列に1個、又は1個以上で且つ連続したブランクセル""が存在する場合
>ブランクセル(連続している行の全て)の
>1.すぐ左隣のセル(群)の値
>2.すぐ左隣のセル(群)の一つ上のセルの値 
>  を合計した値を取得したいです。
>
>例えば、表ですと
>
>B4とB5が1個以上の連続したブランクセルなので
>すぐ左隣のセル群=A4とA5 →値は 1 と 2
>すぐ左隣のセル群(=A4とA5)の一つ上のセル=A3 →値は  3
>で 1+2+3 = 6 という値を取得したいのです。
>
>(条件)ここまでのコードの流れで、出現した1個目の
>ブランクセルの列数を変数:j に代入している状態です。
>例えば、表ではB4セルが1個目のブランクセルなので 
>変数:j に 4 が格納されています。
>
>よって、変数 j から参照する形で、上記の欲しい値を
>取得できればと考えています。
>
>下記まで書いて、行き詰まりました。
>
>Range("B" & j), Range("B" & j).End(xldown))              .SpecialCells(xlCellTypeBlanks).Offset(0,-1)
>
>
>恐れ入りますが、どなたかご指導頂けないでしょうか。

て、取得した値を何処へ出力するのですか?

【67153】Re:ブランクセル群のすぐ左隣にあるセル...
発言  リス  - 10/11/10(水) 20:43 -

引用なし
パスワード
   >取得した値を何処へ出力するのですか?
説明不足で申し訳ございませんでした。

その値を任意の変数、例えば k に入れて、最終的には
k の値 と B列の値 で大小の比較をしたいと
思っています。

k = Range("B" & j), Range("B" & j).End(xldown))              .SpecialCells(xlCellTypeBlanks).Offset(0,-1)

もし、おかしな事言っていたら申し訳ありません。
よろしくお願い致します。

【67154】Re:ブランクセル群のすぐ左隣にあるセル...
発言  Hirofumi  - 10/11/10(水) 22:32 -

引用なし
パスワード
   Option Explicit

Public Sub Sample()

  Dim i As Long
  Dim lngStart As Long
  Dim lngRowEnd As Long
  Dim vntResult As Variant
  
  '先頭行位置
  lngStart = 1
  '最終行取得
  lngRowEnd = Cells(Rows.Count, "A").End(xlUp).Row
  
  For i = lngStart + 1 To lngRowEnd
    If IsEmpty(Cells(i, "B").Value) Then
      'ブランクセル先頭なら
      If IsEmpty(vntResult) Then
        vntResult = Cells(i - 1, "B").Value
      End If
      vntResult = vntResult + Cells(i, "B").Value
    Else
      'ブランクセル最終の下なら
      If Not IsEmpty(vntResult) Then
        MsgBox "B列と比較する値は" & vntResult
        vntResult = Empty
      End If
    End If
  Next i
  
  'Loop最終行がブランクだった場合
  If Not IsEmpty(vntResult) Then
    MsgBox "B列と比較する値は" & vntResult
  End If
  
End Sub

【67155】Re:ブランクセル群のすぐ左隣にあるセル...
発言  ichinose  - 10/11/11(木) 7:16 -

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


データを

  |A| |B |
1  項目1 項目2  
2  | 2||15 |
3  | 5||10 |
4  | 3||20 |
5  | 1||" "| →ブランク
6  | 2||" "| →ブランク
7  | 4||10 |
8  | 6||25 |

というように1行目は、見出しにしておいた方が良いと思います。
上記のようなデータだとして・・・、

Sub test1()
  Dim ans As Double
  Dim rng As Range
  Dim crng As Range
  Dim target As Range
  On Error Resume Next
  ans = 0
  Set rng = Range("a1", Cells(Rows.Count, "a").End(xlUp)).Offset(0, 1).SpecialCells(xlCellTypeBlanks)
  If Err.Number = 0 Then
    Set target = Nothing
    For Each crng In rng.Areas
     If target Is Nothing Then
       Set target = crng.Offset(-1, -1).Resize(crng.Count + 1, 1)
     Else
       Set target = Union(target, crng.Offset(-1, -1).Resize(crng.Count + 1, 1))
     End If
    Next
    ans = Application.Sum(target)
  End If
  MsgBox ans
  Set rng = Nothing
  Set crng = Nothing
  Set target = Nothing
  On Error GoTo 0
End Sub


尚、2行目がもし

  |A| |B |
1  項目1 項目2  
2  | 2||"" | ←ブランクの場合は

すぐ左隣のセル 2だけが計算対象でよいですね?

【67156】お礼
お礼  リス  - 10/11/11(木) 19:05 -

引用なし
パスワード
   Hirofumi 様

お礼が遅れてしまい、申し訳ございません。

ご教示頂き大変ありがとうございました。
勉強になりました。

リス

【67157】お礼
お礼  リス  - 10/11/11(木) 19:07 -

引用なし
パスワード
   ichinose様

返答が遅くなり申し訳ございません。

>すぐ左隣のセル 2だけが計算対象でよいですね?
はい、仰るとおりでございます。

この度はご指導頂き誠にありがとうございました。

リス

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