Excel VBA質問箱 IV

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

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


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

【81193】Re:別ブックの同一シート全てにコピペし...
発言  マナ  - 20/3/4(水) 22:24 -

引用なし
パスワード
   ▼初心者です。 さん:

マクロは、どのブックに記述していますか。
・ツリー全体表示

【81192】別ブックの同一シート全てにコピペしたい
質問  初心者です。  - 20/3/4(水) 21:22 -

引用なし
パスワード
   VBA触り始めの初心者です。
見よう見真似、独学で取り組んでいるので
至らぬ点が多くあるかとは思いますがよろしくお願いいたします。

本題ですが、
会社での作業指示表(誰が何時に何をするかといったような横帯グラフのようなもの)
がグループの主任とグループ1担当、グループ2担当と
それぞれ別々のブックで出力され、毎月その3グループ分を
1つのブックにまとめ1日1枚の紙に出力して見やすくしているのですが、
これを自動化したく下記のマクロを組んでみました。

主任のシートを集約元へ全てコピーする段階はクリアできたので省いています。

Sub WS()        
        
' グループ1のブックをアクティブ化        
        
  Dim myBook As Workbook        
  For Each myBook In Workbooks        
  If myBook.Name Like "WS_0112_*.xls" Then        
  myBook.Activate        
  Exit For        
  End If        
  Next        
        
' グループ1のブックをシート毎にチェック        
        
  Dim Ws As Worksheet        
  For Each Ws In Worksheets        
    Ws.Activate        
        
' グループ1の出勤人数のチェック cnt=出勤人数 cnt2=選択範囲閉め        
        
  Set MyColumns = Columns("B")        
  cnt = WorksheetFunction.CountA(MyColumns)        
  Dim cnt2 As Long        
  cnt2 = cnt * 2 + 17        
        
' 集約元へコピーする範囲の指定及びコピー        
        
  Rows(18 & ":" & cnt2).Copy        
        
' グループ1のシート名を宣言        
        
  Dim g1name As String        
  g1name = ActiveSheet.Name        
          
          
' 集約元のブックをアクティブ化        
        
  Dim myBook2 As Workbook        
  For Each myBook2 In Workbooks        
  If myBook2.Name Like "集約用*" Then        
  myBook2.Activate        
  Exit For        
  End If        
  Next        
          
' 集約元のブックをシート毎にチェック        
          
  Dim WS2 As Worksheet        
  For Each WS2 In Worksheets        
    WS2.Activate        
          
' 集約元のシート名を宣言        
        
  Dim totalname As String        
  totalname = ActiveSheet.Name        
          
  Dim ss As Long        
          
          
  If totalname = g1name Then        
    If Range("A18") = "1" Then        
    ss = 1        
    Else        
    ss = 0        
    End If        
    If ss = 1 Then        
    Range("A22").PasteSpecial        
    Else        
    Range("A20").PasteSpecial        
    End If        
  End If        
          
  Exit For        
  Next        
  Next        
        
        
End Sub        


まだ主任のブックとグループ1のブックをまとめようとしている段階ですが、
それでもシート1枚目(月の1日目)しかうまくコピペができません。
コピー元の最終シートが範囲選択されてコピーされているところまでは動いてます。
1枚目以降も集約元のシートへペーストしたいのですが、
改善点を教えていただけると助かります。

わかりにくい説明かもしれませんが、どうぞよろしくお願いいたします。
・ツリー全体表示

【81191】Re:マウスを砂時計にしたい
お礼  ゆり  - 20/3/4(水) 12:37 -

引用なし
パスワード
   ▼マナ さん:
>▼ゆり さん:
>
>>Application.Cursor = xlWait
>
>の次行(2行目)に、ブレークポイントを設定したらどうなりますか。

すいません。
新しいexcelにソースをコピーしながら、作り直したらいけました。
Book自体、おかしくなっていたかも知れません。
ありがとうございました。
・ツリー全体表示

【81189】Re:マウスを砂時計にしたい
発言  マナ  - 20/3/3(火) 20:41 -

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

>Application.Cursor = xlWait

の次行(2行目)に、ブレークポイントを設定したらどうなりますか。
・ツリー全体表示

【81188】Re:マウスを砂時計にしたい
質問  ゆり  - 20/3/3(火) 19:59 -

引用なし
パスワード
   ▼マナ さん:
>▼ゆり さん:
>
>この行を1行目に移動させるとどうなりますか
>
>>Application.Cursor = xlWait

移動しても同じなんです。

もちろん、新しいブックでマウスを砂時計にするだけのロジックなら、きちんと動きます。
だから、何か今のマクロ全体に関係があるのかと思ったんですが。
・ツリー全体表示

【81187】Re:マウスを砂時計にしたい
発言  マナ  - 20/3/3(火) 19:45 -

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

この行を1行目に移動させるとどうなりますか

>Application.Cursor = xlWait
・ツリー全体表示

【81186】マウスを砂時計にしたい
質問  ゆり E-MAIL  - 20/3/2(月) 22:16 -

引用なし
パスワード
   Application.Cursor = xlWait

この何てことない一文なのですが、実際には砂時計になってくれません。
ステップ実行すると、正しく砂時計になります。

ユーザーフォームのコマンドボタンクリック時です。

今までこんなこと一度もなくて、わけがわかりません。
処理は数十秒あるので、砂時計になって欲しいのですが。

お知恵をお借りしたく、何かヒントがありましたら、お願いします。
・ツリー全体表示

【81185】Re:条件つきの数字の入力
発言  マナ  - 20/3/1(日) 9:16 -

引用なし
パスワード
   ▼助けてください さん:
>Excelの関数を教えてください。

ここは、VBAに関する質問箱です。


>1.のルールはできるのですが,2.のルールがどうしてもできません。

COUNTIFを使用しましたか?
2の場合は、さらに、COUNTIFSも同時に使えばよいのではありませんか。
・ツリー全体表示

【81184】Re:キー値と属性の組の集合を良い感じに...
発言  マナ  - 20/3/1(日) 9:07 -

引用なし
パスワード
   ▼りった さん:

こんなことですか?
現状がわかっていないので、同じことかもしれません。

Sub test()
  Dim キャラ As New Collection
  
  キャラ.Add New Collection, "トム"
  キャラ("トム").Add 100, "攻撃力"
  キャラ("トム").Add 50, "守備力"
   
  MsgBox キャラ("トム")("守備力")
  
End Sub
・ツリー全体表示

【81183】条件つきの数字の入力
質問  助けてください  - 20/3/1(日) 7:23 -

引用なし
パスワード
   Excelの関数を教えてください。
現在エクセルで以下の状態です。
A列を手入力していますが,A列に関数を入れて,「1,2」の数字を自動表示させたいです。
「1」「2」のルールは以下です。

1.C列で,上から見ていって,初めて出てきた果物に「1」。鈴木チームのリンゴはすでに山本チームでりんご出てきているので何も数字がつきません。
2.C列で,上から見ていって,同じチーム内で同じ果物が出てきたら「2」。したがって,山本チームの「りんご」には「2」が付きますが,鈴木チームの「バナナ」には「2」がつきません(すでに山本チームでバナナ)が出ているため。

1.のルールはできるのですが,2.のルールがどうしてもできません。
助けてください。


A列   B列      C列
数字   チーム列    果物列
1    山本     りんご
2    山本     りんご
1    山本     みかん
1    山本     バナナ
     鈴木     りんご
1    鈴木     イチゴ
     鈴木     バナナ
2    鈴木     イチゴ

よろしくお願いします。
・ツリー全体表示

【81182】キー値と属性の組の集合を良い感じに変数...
質問  りった  - 20/2/29(土) 10:07 -

引用なし
パスワード
   キー値と属性の組の集合を変数として保持し、キー値で該当する組を取り出したいのですが何かうまく書くこと出来ますでしょうか?

実際に作るものとは異なりますが、具体例としては下記です。
 下記のようなテーブルが有って
  キャラ名,HP,攻撃力,守備力,スキル名
  ガイ,200,90,50,"兜割り"
  トム,300,30,90,"鉄壁の守り"
  サラ,100,90,10,"エクスプロージョン"
 下記のようなイメージで使いたいです。
  xxx("ガイ").hp
  xxx("トム").attack
  xxx("サラ").defence


属性の数だけコレクションを作れば、キー値で取り出すことは出来ますが、変数がバラバラになってる感じが嫌いです。(妥協できなくも無いですが)
Dim colHP As Collection
Dim colAttack As Collection
Dim colDefence As Collection
Set colHP = New Collection
Set colAttack = New Collection
Set colDefence = New Collection

typeの配列にすれば、変数にまとまりはありますが、キー値で取り出すのに手間がかかります。

なにかいい方法ありますでしょうか?
「多分無い。○○で妥協すべし」等の回答でも有りがたいです。
・ツリー全体表示

【81181】Re:配列の一括貼り付けについて
発言  ピンク  - 20/2/25(火) 18:43 -

引用なし
パスワード
   予め配列のサイズを決めてWorksheetFunction.Transposeを使わなければ

Sub Test2()
  Dim wb As Workbook
  Dim ws1 As Worksheet, ws2 As Worksheet
  Set wb = ThisWorkbook
  Set ws1 = wb.Worksheets(1)
  Set ws2 = wb.Worksheets(2)
  Dim a() As Variant
  Dim n As Long, i As Long, j As Long

  'A例に定数が含まれるセルの数
  n = ws1.Columns(1).SpecialCells(xlCellTypeConstants).Count
  ReDim a(1 To n, 0)  '二次元配列

  For i = 1 To ws1.Cells(Rows.Count, 1).Row
    If ws1.Cells(i, 1) <> "" Then
      j = j + 1
      a(j, 0) = ws1.Cells(i, 1).Value
    End If
  Next
  ws2.Range("A1").Resize(n).Value = a
End Sub
・ツリー全体表示

【81180】Re:配列の一括貼り付けについて
発言  ピンク  - 20/2/25(火) 18:14 -

引用なし
パスワード
   Worksheet関数(WorksheetFunction.Transpose)で取り扱える 配列の上限は、
65536までみたいです。
・ツリー全体表示

【81179】配列の一括貼り付けについて
質問  tera E-MAIL  - 20/2/25(火) 12:47 -

引用なし
パスワード
   22万件のデータを貼り付けたいです。
配列に格納して、一括貼り付けが早いと思っています。
6万件くらいまではエラーなくできるのですが、
7万件以上のデータがあるとエラーが出てしまいます。
実行時エラー"13"
型が一致しません

どこが問題かわからないためご教授願えないでしょうか。
下記にコードを記載します。

==========
Sub test1()
Dim wb As Workbook
Dim ws1 As Worksheet, ws2 As Worksheet
Set wb = ThisWorkbook
Set ws1 = wb.Worksheets(1)
Set ws2 = wb.Worksheets(2)

Dim a() As Variant
Dim c As Long
c = 0
ReDim a(c)

Do Until ws1.Cells(c + 1, 1) = ""
  a(c) = ws1.Cells(c + 1, 1).Value
  c = c + 1
  ReDim Preserve a(c)
Loop

ws2.Activate
ws2.Range(Cells(1, 1), Cells(UBound(a) + 1, 1)).Value = WorksheetFunction.Transpose(a)

End Sub
・ツリー全体表示

【81178】Re:ユーザーフォームのリストボックスに...
お礼  投稿者  - 20/2/18(火) 19:08 -

引用なし
パスワード
   ご指摘の通りOption Explicit追加しました。
初心者の私にはすごい助かるものです。教えていただきありがとうございました。
・ツリー全体表示

【81177】Re:ユーザーフォームのリストボックスに...
発言  γ  - 20/2/18(火) 16:26 -

引用なし
パスワード
   追記:(大事なことです。)

Option Explicit
をモジュールの一行目に挿入するようにして下さい。
そうすれば、今回のような未宣言の変数には警告が出て、
しかも場所を特定してくれますから、原因が直ぐに判明します。
下記参照
ht tp://officetanaka.net/excel/vba/beginner/06.htm

なお、
ツール − オプション − 編集 で
「変数の宣言を強制する」にチェックを入れておけば、
モジュールを作成した時点で、Option Explicitが自動的に挿入されるので、
手間が省けます。
一度だけチェックを入れておけば、以後、気にする必要はありません。(一生涯)
・ツリー全体表示

【81176】Re:ユーザーフォームのリストボックスに...
お礼  投稿者  - 20/2/18(火) 12:49 -

引用なし
パスワード
   丁寧に教えていただきありがとうございます。
質問するのも初めてだったのでいろいろと不適切な部分があり
もうしわけありませんでした。
思い通りの動作を確認できました!
ありがとうございます。
・ツリー全体表示

【81175】Re:ユーザーフォームのリストボックスに...
回答  γ  - 20/2/18(火) 11:10 -

引用なし
パスワード
   Columnプロパティを使うとよいと思います。
参考にしてください。

Private Sub CommandButton1_Click()
  Dim wb As Workbook
  Dim ws As Worksheet
  Dim flg As Boolean
  Dim myData, myData2()
  Dim i As Long, j As Long, cn As Long
  Dim LastRow As Long

  '対象Bookの指定
  For Each wb In Workbooks
    If wb.Name = "DATA.xlms" Then
      flg = True
      Exit For
    End If
  Next

  If flg = False Then
    Set wb = Workbooks.Open(ThisWorkbook.Path & "\DATA.xlsm")
  End If

  '配列の作成
  For Each ws In wb.Worksheets
    With ws
      LastRow = .Cells(Rows.count, 1).End(xlUp).Row
      myData = .Range(.Cells(1, 1), .Cells(LastRow, 7)).Value
    End With

    For i = LBound(myData) To UBound(myData)
      If myData(i, 4) Like "*" & TextBox1.Value & "*" Then
        cn = cn + 1
        ReDim Preserve myData2(1 To 4, 1 To cn)
        myData2(1, cn) = myData(i, 1)
        myData2(2, cn) = myData(i, 3)
        myData2(3, cn) = myData(i, 4)
        myData2(4, cn) = myData(i, 6)
      End If
    Next i
  Next

  '
  With ListBox1
    .ColumnCount = 4
    .ColumnWidths = "50;200;200;50"
    .Column() = myData2
  End With

  wb.Close SaveChanges:=False
End Sub

なお、投稿にあたっては、手打ちせずに、
VBE(エディタ−)にあるコードをそのままコピーペイストしてください。
手打ちミスの修正までするのは無駄です。議論が噛み合わないこともあります。

また、冒頭に Option Explicit として、
未宣言の変数が無いようにしてください。
オプション設定を変更することで、自動的に、
Option Explicit を書き込む設定にしておくことを推奨します。
・ツリー全体表示

【81174】ユーザーフォームのリストボックスに別ブ...
質問  初心者です。  - 20/2/17(月) 21:58 -

引用なし
パスワード
   ユーザフォームのテキストボックスの文字を別ブックの全てのシートから検索し
必要な列だけをリストボックスに表示したいです。
現在、ネットで検索してなんとか
別ブックの指定したシートから検索し表示は出来たのですが・・・。


Private Sub CommandButton1_Click()

  Dim wb As Workbook
  Dim flg As Boolean
  Dim myData,myData2(),myno
  Dim i As long,j As long,cn As long

  ForEach wb In Workbooks
  If wb.Name="DATA.xlms"Then
  fig=True
  Exit For
  End If
  Next

  If fig=False Then
  Workbooks.Open ThisWorkbook.Path&"\DATA.xlsm"
  End If

  With Worksheets("K2")
  lastRow=.Cells(Rows.Count,1).End(xlUp).Row
  myData=.Range(.Cells(1,1),.Cells(lastRow,7)).Value
  End With

  ReDim myData2(1 To lastRow,1 To 4)
  Fori=LBound(myData)To UBound(myData)
  If myData(i,4)Like"*"&Textbox1.Value&"*"Then
  cn=cn+1
  myData2(cn,1)=myData(i,1)
  myData2(cn,2)=myData(i,3)
  myData2(cn,3)=myData(i,4)
  myData2(cn,4)=myData(i,6)
  End If
  Next i

  With リストボックス
  .ColumnCount=4
  .ColumnWidths="50;200;200;50"
  .List
  End With

  Workbooks("DATA.xlsm").Close SaveChanges:=False

  End Sub
別ブック内の全てのシートから検索し表示したいです。
シートは5つあります。
どのように記述すればよいかご教示お願いします。
・ツリー全体表示

【81173】Re:複数シートのコピー(EXCEL2010)
お礼  初心者  - 20/2/17(月) 18:10 -

引用なし
パスワード
   ▼初心者 さん:

別の掲示板にうつります。すみません。ありがとうございました。
・ツリー全体表示

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