Excel VBA質問箱 IV

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

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


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

【76620】初心者でごめんなさい。 よぽん 15/2/14(土) 16:42 質問[未読]
【76621】Re:初心者でごめんなさい。 β 15/2/14(土) 17:43 発言[未読]
【76622】Re:初心者でごめんなさい。 マナ 15/2/14(土) 17:45 発言[未読]
【76645】Re:初心者でごめんなさい。 マナ 15/2/22(日) 16:52 発言[未読]
【76623】Re:初心者でごめんなさい。 β 15/2/14(土) 18:37 発言[未読]
【76624】Re:初心者でごめんなさい。 よぽん 15/2/16(月) 11:14 お礼[未読]
【76625】Re:初心者でごめんなさい。 マナ 15/2/16(月) 20:50 発言[未読]
【76648】Re:初心者でごめんなさい。 β 15/2/22(日) 17:41 発言[未読]

【76620】初心者でごめんなさい。
質問  よぽん  - 15/2/14(土) 16:42 -

引用なし
パスワード
   以下のようなセルデータがあったとします。
入力されている列はA〜Fまでです。
  ┌─┬─┬─┬─┬─┬──┬─┬─┬──┬─┬─┬──┐
  │ A│ B│ C│ D│ E│ F │ G│ H│ I │ J│ K│ L │
┌─┼─┼─┼─┼─┼─┼──┼─┼─┼──┼─┼─┼──┤
│ 1│ │ │ │ │ A│ 0.5│ │ A│ 0.7│ │ A│ 0.7│
├─┼─┼─┼─┼─┼─┼──┼─┼─┼──┼─┼─┼──┤
│ 2│ │ │ │ │ │  │ │ B│ 0.6│ │ B│ 0.6│
├─┼─┼─┼─┼─┼─┼──┼─┼─┼──┼─┼─┼──┤
│ 3│ │ │ │ │ C│ 0.9│ │ C│ 1.0│ │ C│ 1.0│
├─┼─┼─┼─┼─┼─┼──┼─┼─┼──┼─┼─┼──┤
│ 4│ │ │ │ │ │  │ │ │  │ │ D│ 0 │
├─┼─┼─┼─┼─┼─┼──┼─┼─┼──┼─┼─┼──┤
│ 5│ │ │ │ │ B│ 0.6│ │ │  │ │ E│ 0 │
├─┼─┼─┼─┼─┼─┼──┼─┼─┼──┼─┼─┼──┤
│ 6│ │ │ │ │ C│ 0.1│ │ │  │ │ F│ 0 │
├─┼─┼─┼─┼─┼─┼──┼─┼─┼──┼─┼─┼──┤
│ 7│ │ │ │ │ A│ 0.2│ │ │  │ │ │  │
└─┴─┴─┴─┴─┴─┴──┴─┴─┴──┴─┴─┴──┘

E(名称)とF(値)を検索していきます。

1.Hに名称順に、Iに合計値を表示する。
2.Kに名称の一覧を作成しておき該当する名称の値を表示する。


このような場合どうすればよいのでしょうか?
よろしくお願いします。

【76621】Re:初心者でごめんなさい。
発言  β  - 15/2/14(土) 17:43 -

引用なし
パスワード
   ▼よぽん さん:

こんばんは

少なくとも、2.は関数(SUMIF)で対応できますし、関数エキスパートさんなら
1.も関数処理が可能だと思いますが、VBAでやりたいということですか?

【76622】Re:初心者でごめんなさい。
発言  マナ  - 15/2/14(土) 17:45 -

引用なし
パスワード
   例えば、統合と並べ替えの機能で可能です。
マクロを使うまでもないと思いますが。

Option Explicit

Sub test()
  Dim 統合先 As Range, 統合元 As Range

  Set 統合先 = ActiveSheet.Columns("H:I")
  Set 統合元 = ActiveSheet.Columns("E:F")

  統合先.ClearContents
  
  With 統合先
    .Consolidate _
      Sources:=統合元.Address(ReferenceStyle:=xlR1C1), _
      Function:=xlSum, _
      TopRow:=False, _
      LeftColumn:=True
  End With
  
  With ActiveSheet.Sort.SortFields
    .Clear
    .Add Key:=統合先.Cells(1)
  End With
  With ActiveSheet.Sort
    .SetRange 統合先
    .Header = xlNo
    .Apply
  End With

End Sub

Sub test2()
'
  Dim 統合先 As Range, 統合元 As Range

  Set 統合先 = ActiveSheet.Columns("K:L")
  Set 統合元 = ActiveSheet.Columns("E:F")

  統合先.Columns(2).ClearContents
  
  With 統合先
    .Consolidate _
      Sources:=統合元.Address(ReferenceStyle:=xlR1C1), _
      Function:=xlSum, _
      TopRow:=False, _
      LeftColumn:=True
  End With
  
End Sub

【76623】Re:初心者でごめんなさい。
発言  β  - 15/2/14(土) 18:37 -

引用なし
パスワード
   ▼よぽん さん:

力技です。

Sub Test()
  Dim sl As Object
  Dim v As Variant
  Dim dic As Object
  Dim r As Range
  Dim col As Range
  Dim c As Range
  Dim x As Long
  Dim i As Long
  
  Set dic = CreateObject("Scripting.Dictionary")
  Set sl = CreateObject("System.Collections.SortedList")
  For Each c In Range("K1").CurrentRegion.Columns(1).Cells
    dic(c.Value) = 0
  Next
  
  Set r = Range("A1", ActiveSheet.UsedRange).Columns("A:F")
  x = r.Columns.Count
  For i = 1 To x Step 2
    For Each col In r.Columns(i)
      For Each c In col.Cells
        If Not IsEmpty(c.Value) Then
          sl(c.Value) = sl(c.Value) + c.Offset(, 1).Value
          If dic.exists(c.Value) Then dic(c.Value) = dic(c.Value) + c.Offset(, 1).Value
        End If
      Next
    Next
  Next
  
  ReDim v(0 To sl.Count, 0 To 1)
  For i = 0 To sl.Count - 1
    v(i, 0) = sl.getkey(i)
    v(i, 1) = sl.getbyindex(i)
  Next
  
  Range("H1").CurrentRegion.ClearContents
  Range("H1").Resize(sl.Count, 2).Value = v
  v = dic.items
  Range("L1").Resize(dic.Count).Value = WorksheetFunction.Transpose(dic.items)
  
End Sub

【76624】Re:初心者でごめんなさい。
お礼  よぽん  - 15/2/16(月) 11:14 -

引用なし
パスワード
   VBA?マクロ?

まだ、よくわかっていないので
マクロは入力や操作手順とかを覚えて同じ操作を行うためのものですよね?
マクロでVBAを使うのですか?
VBAをどこに記入するのかその辺からわかっていません。
すみません。

今私にわかっているのは
セルに [=・・・・] で関数?
を使う方法ぐらいです。
なので、1の方法は初心者なので私にはできないってことでしょうかね?

VBAで説明していただいた方法も試したいと思います。

【76625】Re:初心者でごめんなさい。
発言  マナ  - 15/2/16(月) 20:50 -

引用なし
パスワード
   >VBA?マクロ?

気にすることありません。
私は使い分けしていません。

ここは、VBA(マクロ)の掲示板なので、
もし、関数での回答を希望していたのであれば、
他で質問したほうがよかったかも。

ただ、関数でなくても統合と並べ替えの操作でできますよ。
慣れれば、1分もかかりません。
私の回答はそれをマクロの記録をとって叩き台にしています。

統合:
ht tp://www.eurus.dti.ne.jp/~yoneyama/Excel/tougou.html
並べ替え:
ht tp://www.oshiete-kun.net/archives/2014/10/2010_2.html

【76645】Re:初心者でごめんなさい。
発言  マナ  - 15/2/22(日) 16:52 -

引用なし
パスワード
   この場合、Withは無意味でした。
 
>  With 統合先
>    .Consolidate _
>      Sources:=統合元.Address(ReferenceStyle:=xlR1C1), _
>      Function:=xlSum, _
>      TopRow:=False, _
>      LeftColumn:=True
>  End With

【76648】Re:初心者でごめんなさい。
発言  β  - 15/2/22(日) 17:41 -

引用なし
パスワード
   ▼よぽん さん:

>なので、1の方法は初心者なので私にはできないってことでしょうかね?

いえいえ、私が初心者なので関数での回答ができないというだけのことです。
マナさんがおっしゃるように、ここは、一応、マクロの掲示板なので、ここで
別掲示板を紹介していいのかどうか悩みますけど、「エクセル 関数 掲示板」といったもので
ググると、いくつか、専門の掲示板がでてくると思いますよ。

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