Excel VBA質問箱 IV

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

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


62 / 3841 ページ ←次へ | 前へ→

【81236】Re:VBAの列の空白と1の認識をループする...
発言  マナ  - 20/3/21(土) 23:33 -

引用なし
パスワード
   ▼アオ さん:

あれっ、レイアウトの説明していただけたので、一応、考えてみましたが、
もっと、簡単にできないものかと、投稿を迷っていたら消えている。
削除されましたか?

Option Explicit

Sub test()
  Dim wsA As Worksheet
  Dim wsB As Worksheet
  Dim wsC As Worksheet
  Dim dic As Object
  Dim 条件, 点数, 結果()
  Dim j As Long, k As Long
  
  
  Set wsA = Worksheets("A")
  Set wsB = Worksheets("B")
  Set wsC = Worksheets("C")
  
  Set dic = CreateObject("scripting.dictionary")
  条件 = wsA.Range("E6").Resize(30, 10).Value
  
  For j = 1 To UBound(条件, 2)
    For k = 1 To UBound(条件, 1)
      If Not IsEmpty(条件(k, j)) Then dic(j) = dic(j) & " " & k
    Next
  Next

  点数 = wsB.Range("A2:A100").SpecialCells(xlCellTypeConstants).Columns("I:AL").Value
  
  ReDim 結果(1 To UBound(点数, 1), 1 To UBound(条件, 2))
  
  For j = 1 To UBound(結果, 2)
    For k = 1 To UBound(結果, 1)
      If dic.exists(j) Then
        With WorksheetFunction
          結果(k, j) = .Average(.Index(点数, k, Split(.Trim(dic(j)))))
        End With
      End If
    Next
  Next
  
  wsC.Range("D2").Resize(UBound(結果, 1), UBound(結果, 2)).Value = 結果
  
End Sub
・ツリー全体表示

【81235】Re:VBAの列の空白と1の認識をループする...
発言  マナ  - 20/3/21(土) 17:16 -

引用なし
パスワード
   ▼アオ さん:

>シートA、B、Cがあります。

各シートのレイアウトを、説明していただかないと
誰も回答できないです。
・ツリー全体表示

【81234】VBAの列の空白と1の認識をループする方...
質問  アオ  - 20/3/20(金) 22:13 -

引用なし
パスワード
   初心者です。よろしくお願いいたします。

シートA、B、Cがあります。
最終的には個人の平均データをまとめるものです。

シートCにXさんの30の質問の平均を記入します。
シートBに30の質問の点数があります。
シートAでは30の質問と10の項目がx軸y軸であり、どの質問とどの質問の点数の平均をみたいかを選びます。
シートAの条件は選べる状態です。

まず、シートAでE列の空白をとばし1があればシートBのXさん行の点数をピックアップします。空白はスキップします。30項目まで繰り返します。シートBでXさんのピックアップした点数の平均値を出します。出した平均値をシートCのXさんのところに記入します。

これを何十名ものデータをループさせます。

ややこしくて申し訳ありませんが、わかる方がいらっしゃたらよろしくお願いいたします。
急に頼まれて困っています。
よろしくお願いいたします。
・ツリー全体表示

【81233】Re:キー値と属性の組の集合を良い感じに...
回答  hatena  - 20/3/17(火) 21:20 -

引用なし
パスワード
   例えば、キャラのプロパティを設定して、コレクションに登録する部分のコードが面倒なので、シンプルに1行にしたいというときは、クラスモジュールに下記のようにメソッドを追加します。

クラスモジュール Chara
--------------------
Option Explicit

Public Name As String
Public HP As Long
Public AttacK As Long
Public Defence As Long
Public Skill As String

Public Sub Init(aCol As Collection, aName As String, aHP As Long, aAttacK As Long, aDefence As Long, aSkill As String)
  Name = aName
  HP = aHP
  AttacK = aAttacK
  Defence = aDefence
  Skill = aSkill
  aCol.Add Me, Name
End Sub
-------------------

そうすると前回の回答の使用例のコードは下記のようになります。

Public Sub test1()
  Dim colChara As Collection
  Set colChara = New Collection
  
  Dim C As Chara
  
  Set C = New Chara
  C.Init colChara, "ガイ", 200, 90, 50, "兜割り"
  
  Set C = New Chara
  C.Init colChara, "トム", 300, 30, 90, "鉄壁の守り"
  
  
  Debug.Print colChara("ガイ").HP
  Debug.Print colChara("トム").Defence

End Sub
・ツリー全体表示

【81232】Re:キー値と属性の組の集合を良い感じに...
回答  hatena  - 20/3/17(火) 20:11 -

引用なし
パスワード
   TypeがCollectionに格納出来たらいいのですが、TypeはCollectionに格納できないという制限があります。

代わりにクラスを使えばどうでしょうか。
クラスモジュールを新規作成して、名前を Chara とします。
下記のコードを記述します。

Option Explicit

Public Name As String
Public HP As Long
Public Attack As Long
Public Defence As Long
Public Skill As String


---
使用例

Public Sub test()
  Dim colChara As Collection
  Set colChara = New Collection
    
  Dim C As Chara
  Set C = New Chara
  With C
    .Name = "ガイ"
    .HP = 200
    .Attack = 90
    .Defence = 50
    .Skill = "兜割り"
  End With
  colChara.Add C, "ガイ"
  
  Set C = New Chara
  With C
    .Name = "トム"
    .HP = 300
    .Attack = 30
    .Defence = 90
    .Skill = "鉄壁の守り"
  End With
  colChara.Add C, "トム"
  
  Debug.Print colChara("ガイ").HP
  Debug.Print colChara("トム").Defence

End Sub


クラスではパブリック変数を宣言してますが、プロパティを使ったりメソッドを追加したりするとより使いやすくできます。
・ツリー全体表示

【81231】Re:キー値と属性の組の集合を良い感じに...
お礼  りった  - 20/3/14(土) 13:58 -

引用なし
パスワード
   なるほど! ありがとうございます。
・ツリー全体表示

【81230】Re:複数項目 オートフィルターについて
お礼  みも  - 20/3/12(木) 16:58 -

引用なし
パスワード
   ▼γ さん:
>ああそうかSplit関数を使う場面だったかな。
>試して見てください。


Splitでうまく作動しました!
教えて頂き、誠にありがとうございました。
・ツリー全体表示

【81229】Re:複数項目 オートフィルターについて
発言  γ  - 20/3/12(木) 15:06 -

引用なし
パスワード
   ああそうかSplit関数を使う場面だったかな。
試して見てください。
・ツリー全体表示

【81228】Re:複数項目 オートフィルターについて
発言  γ  - 20/3/12(木) 14:08 -

引用なし
パスワード
   Array(KAKUNIN.Cells(4, 5))は、無効です。
Array("100,200")などと書いているのと同じですから。

(1)Arrayの要素にセルを指定するか,
または、
(2)複数のセルに入れて置いて
a = Application.Index(Cells(4, 5).Resize(1,2).Value, 1, 0)
などとして、Criteria1:=a とするかです。
・ツリー全体表示

【81227】Re:複数項目 オートフィルターについて
発言  みも  - 20/3/12(木) 13:27 -

引用なし
パスワード
   説明不足で失礼いたしました。
シートのセットはしており、autofilterのコードのみ抜粋しております。

説明がないと分かりにくいかと思ったので
MATはシート名ですという説明のつもりでいれさせていただきました。

紛らわしく申し訳ありませんでした。
よろしくお願い申し上げます。
・ツリー全体表示

【81226】Re:複数項目 オートフィルターについて
発言  γ  - 20/3/12(木) 13:18 -

引用なし
パスワード
   >MAT=シート名
>MAT.Rows(8).AutoFilter Field:=3, Criteria1:=Array("321618001", "321618005"), Operator:=xlFilterValues

MATをワークシート変数とするなら、
Set MAT = シート名
としないといけない。

文字列として使うなら、
Worksheets(MAT)という使い方になります。

このあたりを検討されたらいかがですか?
それ以外のところは見ていません。
・ツリー全体表示

【81225】複数項目 オートフィルターについて
質問  みも  - 20/3/12(木) 12:44 -

引用なし
パスワード
   オートフィルターのVBAで教えていただきたく質問させて頂きます。

複数の項目でフィルターをかけたく、
コード内で指定した場合はフィルタされるのですが
エクセルに同じ内容を記載して実行した場合フィルターできません。

MAT=シート名

KAKUNIN=シート名

MAT.Rows(8).AutoFilter Field:=3, Criteria1:=Array("321618001", "321618005"), Operator:=xlFilterValues
→結果問題なし


KAKUNIN.Cells(4, 5)に記載の内容=>"321618001", "321618005"

MAT.Rows(8).AutoFilter Field:=3, Criteria1:=Array(KAKUNIN.Cells(4, 5)), Operator:=xlFilterValues
→何も選択されず

特にエラーはでません。
色々と試行錯誤して実験してみたのですが
どうしても解決できず、ご教授頂きたくおねがいいたします。
・ツリー全体表示

【81224】Re:複数列を複数シートへの転記について
発言  マナ  - 20/3/10(火) 20:17 -

引用なし
パスワード
   『複数列の複数シートへの転記について』(りんごジャム)
ht tp://www.excel.studio-kazu.jp/kw/20200308235059.html
・ツリー全体表示

【81223】Re:複数列を複数シートへの転記について
発言  マナ  - 20/3/8(日) 23:39 -

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

>列のコピーから、シートのアクティブといった二重ループを試みたのですが

アクティブにする費用ありません。
どのシートの列か、明示するだけでよいです。
こんな感じで。

Sheets("Sheet1"),Columns(1).Copy Sheets("Sheet2"),Columns(2)
・ツリー全体表示

【81222】複数列の複数シートへの転記について
質問  S  - 20/3/8(日) 23:33 -

引用なし
パスワード
   VBA初心者です。

あるシートのA〜Hの列を複数のシート(A列はこのシート、B列はこのシート)
といった具合に転記したいと考えております。
列のコピーから、シートのアクティブといった二重ループを試みたのですがうまく動きません。ひたすらコピーのみがループするのみ。
(イメージは、A列コピー→ xシート貼り付け→B列コピー →yシート貼り付けです)

作動するために、お知恵をお借りできないでしょうか。
・ツリー全体表示

【81221】複数列を複数シートへの転記について
質問  S  - 20/3/8(日) 23:30 -

引用なし
パスワード
   VBA初心者です。

あるシートのA〜Hの列を複数のシート(A列はこのシート、B列はこのシート)
といった具合に転記したいと考えております。
列のコピーから、シートのアクティブといった二重ループを試みたのですがうまく動きません。ひたすらコピーのみがループするのみ。
(イメージは、A列コピー→ xシート貼り付け→B列コピー →yシート貼り付けです)

作動するために、お知恵をお借りできないでしょうか。
・ツリー全体表示

【81220】複数列を複数シートへの転記について
質問  S  - 20/3/8(日) 23:29 -

引用なし
パスワード
   VBA初心者です。

あらシートのA〜Hの列を複数のシート(A列はこのシート、B列はこのシート)
といった具合に転記したいと考えております。
列のコピーから、シートのアクティブといった二重ループを試みたのですがうまく
(イメージは、A列コピー→ xシート貼り付け→B列コピー →yシート貼り付けです)

作動するために、お知恵をお借りできないでしょうか。
・ツリー全体表示

【81219】Re:vbaのsampleコードが欲しいです
発言  初心者  - 20/3/8(日) 12:34 -

引用なし
パスワード
   すみません、ありがとうございます。
・ツリー全体表示

【81218】Re:vbaのsampleコードが欲しいです
発言  マナ  - 20/3/8(日) 7:15 -

引用なし
パスワード
   ▼初心者 さん:
>関数自体は把握してるので、それををvbaで表記するとどうなるのかが知りたくて..w

こんな感じです。

Sub test()
  Dim r As Range
  Dim f As String
  
  Set r = Worksheets("B").Range("G3:G10")
  f = "=IF(D3<>"""",IF(B3<>"""",B3,""""),IF(E3<>"""",""NG"",""""))"
  
  r.Formula = f
  r.Value = r.Value

End Sub
・ツリー全体表示

【81217】Re:vbaのsampleコードが欲しいです
発言  初心者  - 20/3/8(日) 6:58 -

引用なし
パスワード
   関数自体は把握してるので、それををvbaで表記するとどうなるのかが知りたくて..w
失礼しました。シートは一つのみ使う感じです。
・ツリー全体表示

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