Excel VBA質問箱 IV

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

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


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

【81196】Re:処理を中断
発言  マナ  - 20/3/5(木) 18:29 -

引用なし
パスワード
   ▼はるあき さん:

Dim 入力済 As Boolean

のように変数を1個追加して
Falseの場合は、途中でExit Sub

ElseIf itibox.Text = "" Then
  MsgBox "1" + hoka, , "入力漏れ"
Else
  入力済 = True
End if

If 入力済 = False then Exit Sub
・ツリー全体表示

【81195】処理を中断
質問  はるあき  - 20/3/5(木) 13:30 -

引用なし
パスワード
   初めまして。
現在、練習でVBAを使って両替計算表を作ろうとしています。
入金フォームに必要事項を入力すると、"入金"テーブルにデータが追加されるような感じで作ろうと考えています。


そこで、データ入力を抜かすとIf文でメッセージボックスが出るように組んでみたのですが、メッセージ自体は表示されますが、その時点で入力している文がテーブルに追加されてしまいます。

If文で引っかかったら、残りのプログラムを実行しないようにしたいのですが、中々調べても出てこないので質問させていただきました。

もし、コードで改善出来る点もありましたら是非よろしくお願いします…


Private Sub registre_click()

  tmp = "を入力してください。"
  sen = "千円札の枚数" + tmp
  hoka = "円の枚数" + tmp

  If datebox.Text = "" Then
    MsgBox "日付" + tmp, , "入力漏れ"
    
  ElseIf namebox.Text = "" Then
    MsgBox "担当者名" + tmp, , "入力漏れ"
  
  ElseIf manbox.Text = "" Then
    MsgBox "1万円札の枚数" + tmp, , "入力漏れ"
  
  ElseIf gosenbox.Text = "" Then
    MsgBox "5" + sen, , "入力漏れ"
  
  ElseIf nisenbox.Text = "" Then
    MsgBox "2" + sen, , "入力漏れ"
  
  ElseIf senbox.Text = "" Then
    MsgBox "1" + sen, , "入力漏れ"
  
  ElseIf gohyakubox.Text = "" Then
    MsgBox "500" + hoka, , "入力漏れ"
  
  ElseIf hyakubox.Text = "" Then
    MsgBox "100" + hoka, , "入力漏れ"
  
  ElseIf gojubox.Text = "" Then
    MsgBox "50" + hoka, , "入力漏れ"
  
  ElseIf jubox.Text = "" Then
    MsgBox "10" + hoka, , "入力漏れ"
  
  ElseIf gobox.Text = "" Then
    MsgBox "5" + hoka, , "入力漏れ"
  
  ElseIf itibox.Text = "" Then
    MsgBox "1" + hoka, , "入力漏れ"
  End If

  Sheets("入金").Activate
  
  Dim ws As Worksheet
  Dim tbl As ListObject
  Dim N As Long
  
  Set ws = Worksheets("入金")
  Set tbl = ws.ListObjects.Item("入金")
  
    With ws.ListObjects("入金")
      .ShowTotals = False
    End With
    
    With Range("E4").ListObject
    N = .ListColumns(1).Range.Count
      tbl.ListRows.Add
      tbl.ListColumns(1).Range(N + 1) = N
      tbl.ListColumns(2).Range(N + 1) = namebox.Text
      tbl.ListColumns(3).Range(N + 1) = datebox.Text
      tbl.ListColumns(4).Range(N + 1) = manbox.Text
      tbl.ListColumns(5).Range(N + 1) = gosenbox.Text
      tbl.ListColumns(6).Range(N + 1) = nisenbox.Text
      tbl.ListColumns(7).Range(N + 1) = senbox.Text
      tbl.ListColumns(8).Range(N + 1) = gohyakubox.Text
      tbl.ListColumns(9).Range(N + 1) = hyakubox.Text
      tbl.ListColumns(10).Range(N + 1) = gojubox.Text
      tbl.ListColumns(11).Range(N + 1) = jubox.Text
      tbl.ListColumns(12).Range(N + 1) = gobox.Text
      tbl.ListColumns(13).Range(N + 1) = itibox.Text
    End With
    
    With ws.ListObjects("入金")
      .ShowTotals = True
    End With
End Sub
・ツリー全体表示

【81194】Re:別ブックの同一シート全てにコピペし...
発言  [名前なし]  - 20/3/5(木) 2:03 -

引用なし
パスワード
   ▼マナ さん:
>▼初心者です。 さん:
>
>マクロは、どのブックに記述していますか。

主任のブックと
グループ1のブック
グループ2のブック

上記3つを1つにまとめる為の
集約用のブックを作り、そちらにマクロを記述しています。
・ツリー全体表示

【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 -

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

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