Excel VBA質問箱 IV

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

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


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

【81094】Re:標準モジュールで複写元のシートモジ...
発言  マナ  - 19/10/15(火) 19:36 -

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

だから、シートコピーするのではなく

1)新規シート追加
2)全セルをコピー貼り付け

これなら、初心者でもわかるコードで同じ結果を実現できませんか?
・ツリー全体表示

【81093】Re:標準モジュールで複写元のシートモジ...
お礼  うしろ E-MAIL  - 19/10/15(火) 12:13 -

引用なし
パスワード
   マナさんへ
ご指導ありがとうございます。
VBA初心者んなので誤ったソフトの使い方なのかもしれません。
ご想像のとおりインベントマクロが記載してあります。
標準モジュールにコードを書いて全ての値が入力されてから実行ボタンを
押すようにすれば良いかもしれませんね。
利用期間が長引いた場合を想定してこのような質問をさせていただきました。
ありがとうございました。
・ツリー全体表示

【81092】Re:標準モジュールで複写元のシートモジ...
お礼  うしろ E-MAIL  - 19/10/15(火) 12:04 -

引用なし
パスワード
   ▼γ さん:
ご指導ありがとうございます。
工事現場で基本的に毎日入力するもので利用しています。
また、私だけが利用するのであれば、コードの削除は大した作業ではありません。
本来なら、ワークブックを別に管理してして標準フォーマットより必要情報を入力して別ファイルとして保存するのが良いのかもしれません。
入力する方が休日も毎日入力してくれれば、ファイル(ファイル名に少し工夫がいりますが…)が簡単に管理ができ、一つ前の工程情報を読み込み現在のファイルに反映しやすいですね。
しかし、台風や工事の進捗状況により入力しない場合も考えられるため、ファイル名の管理が複雑になり、今の私の能力では無理でした。
ワークシートモジュールのコードは数十行なので大した容量増にはならないのですが工事期間が長くなることを想定し今回の質問をさせていただきました。
VBEは依然少し勉強しましたが、敷居が高そうなのでシートモジュールはそのままにしようと思います。
ありがとうございました。
・ツリー全体表示

【81091】Re:標準モジュールで複写元のシートモジ...
発言  γ  - 19/10/14(月) 21:27 -

引用なし
パスワード
   (1)イベントプロシージャであるとしても、本体を標準モジュールにおいて
  イベントプロシージャから標準モジュールのプロシージャをコールするようにすれば、
  シートモジュールの大きさは節約できます。
(2)シートモジュールのコードを手で消しても、さほど負荷にならないと思うが、
  どうしてもということなら、コードそのものを触ることができます。
  しかし、こうしたことは悪用される懸念があり、余り推奨されません。
  (少なくとも、他人に聞かないと作れないようなら、手作業を薦めます。)
 
  どうしても^2 ということなら、
  「VBAでVBEを操作する」
  ht tp://officetanaka.net/excel/vba/vbe/
  の記事を参照して自作してください。
  ・ワークシート名からobject名を得るには、Worksheets("消したいシート").CodeName
  ・コードの行数は CountOfLinesプロパティ
  ・コードの消去はDeleteLinesメソッド。開始行と消去する行数を指定。
・ツリー全体表示

【81090】Re:標準モジュールで複写元のシートモジ...
発言  マナ  - 19/10/12(土) 18:27 -

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

そもそも、なぜシートモジュールに記述しているのですか。
標準モジュールに記述しない理由がありますか。
イベントマクロでしょうか。

シートコピーしないで、全セルをコピー貼り付けではだめですか。
・ツリー全体表示

【81089】標準モジュールで複写元のシートモジュー...
質問  うしろ E-MAIL  - 19/10/12(土) 15:24 -

引用なし
パスワード
   お世話になります。
どなたかご存じの方アドバイス願います。

標準しモジュールには、前のシートをコピーしてシート名を変更し、
コピー元の文字や数値を新規シートに記載(コピー元とは異なる場所へ)しています。

シートには値が入力される度に数値を計算し、計算値をシート内へ書き込むシートモジュールが作成してあります。

シートモジュールを含むシートをコピーする時、コピーが完了する(シートへシートモジュールが複写される)まではコピー元のシートモジュールが必要となりますが、新規シートが追加された後は、元のシートモジュールは不要となります。

日々1枚ずつシートが増えるたびにシートモジュールも増えることとなりファイルサイズが大きくなります。

ここで質問です。
シートをモジュールごとコピーした後、コピー元のシートモジュールを削除するにはどのようなコードを標準モジュール内に記載すればよいでしょうか
・ツリー全体表示

【81088】Re:2列を参照とするVlookup風の処理
発言  マナ  - 19/8/26(月) 23:23 -

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

>A列に日付、B列に社員名で、2つを一致させる方法がわかりません。
>(VlookupやIndex&Matchは1つしか参照できないため)

具体例を使って説明できませんか。

>なるべく、For〜Nextを2回繰り返す作業はデータの量から重くなるので、避けたいです。

For〜Nextを2回繰り返す場合は、どんなコードになりますか。

>Find,FindNextでそれっぽいことはできましたが、余計重くなったので本末転倒でした。

そのコードを提示できませんか。
・ツリー全体表示

【81087】2列を参照とするVlookup風の処理
質問  SIN  - 19/8/26(月) 22:02 -

引用なし
パスワード
   VBAの質問です。

従業員の1週間分のPC起動時間記録から勤怠管理を作成するマクロを組みたいと思っています。
A列に日付、B列に社員名で、2つを一致させる方法がわかりません。
(VlookupやIndex&Matchは1つしか参照できないため)

なるべく、For〜Nextを2回繰り返す作業はデータの量から重くなるので、避けたいです。
Find,FindNextでそれっぽいことはできましたが、余計重くなったので本末転倒でした。
FomulaArrayで配列関数を書き込むのも避けたいと思っています。

皆さんのお知恵をお借りしたいです。よろしくお願いいたします。
・ツリー全体表示

【81086】Re:VBAで重複データ
発言  マナ  - 19/8/21(水) 18:24 -

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

条件付き書式です。
手作業で設定するほうが楽ですね…
というか、手作業で1回設定したら
マクロを実行する必要がないです。

Sub test()
  Dim sh As Worksheet
  Dim f As String
  
  f = "=COUNTIF(A1,Sheet1!$A$1:$G$100)" _
    & "+COUNTIF(A1,Sheet2!$A$1:$G$100)" _
    & "+COUNTIF(A1,Sheet3!$A$1:$G$100)"

  For Each sh In Sheets(Array("sheet1", "sheet2", "sheet3"))
    With sh.Range("A1:G100").FormatConditions
      .Delete
       .Add(Type:=xlExpression, Formula1:=f).Interior.ColorIndex = 40
    End With
  Next
  
End Sub
・ツリー全体表示

【81085】Re:VBAで重複データ
発言  γ  - 19/8/21(水) 7:15 -

引用なし
パスワード
   こんな書き方もあります。dictionaryを利用する方法です。

Sub test()
  Dim sh As Worksheet, c As Range
  Dim dic As Object

  Set dic = CreateObject("Scripting.Dictionary")

  For Each sh In Sheets(Array("Sheet1", "Sheet2", "Sheet3"))
    For Each c In sh.Range("A1:G100")
      dic(c.Value) = dic(c.Value) + 1
    Next
  Next

  For Each sh In Sheets(Array("Sheet1", "Sheet2", "Sheet3"))
    For Each c In sh.Range("A1:G100")
      If dic(c.Value) > 1 Then c.Interior.ColorIndex = 40
    Next
  Next
End Sub

ちなみに、CountIfによる方法も十分速い(0.6秒台)ですが、
上記は0.1秒台でした。
データ量にも依存するので、一概に言えないかもしれませんが、
一応参考まで。
・ツリー全体表示

【81084】Re:VBAで重複データ
お礼  nao  - 19/8/20(火) 16:07 -

引用なし
パスワード
   ピンクさん
お忙しい中、ありがとうございます。

凄いですね、上手くいきました。

また、動作も早いです。
すごく勉強になりました。

本当にありがとうございました。
・ツリー全体表示

【81083】Re:VBAで重複データ
発言  ピンク  - 19/8/20(火) 10:04 -

引用なし
パスワード
   ▼nao さん:
>複数シート5シート程の重複データも調べたいと思っているのですが
複数シートがSheet1、Sheet2、Sheet3、なら
Sub Test2()
  Dim sh As Worksheet, c As Range
  With WorksheetFunction
    For Each sh In Sheets(Array("Sheet1", "Sheet2", "Sheet3"))
      For Each c In sh.Range("A1:G100")
        If .CountIf(Worksheets("Sheet1").Range("A1:G100"), c.Value) + _
            .CountIf(Worksheets("Sheet2").Range("A1:G100"), c.Value) + _
            .CountIf(Worksheets("Sheet3").Range("A1:G100"), c.Value) > 1 Then
          c.Interior.ColorIndex = 40
        End If
      Next
    Next
  End With
End Sub
・ツリー全体表示

【81082】VBAで重複データ
質問  nao  - 19/8/19(月) 22:31 -

引用なし
パスワード
   ご質問させてください。
素人なりにExcel2016 VBAで重複データを調べています。

現在、同一シート内の検出はできるようになったのですが
複数シート5シート程の重複データも調べたいと思っているのですが
うまく行きません。

それぞれのシートで重複を調べているようです。

例えばシート1にりんごの重複があった場合、
シート2やシート3のリンゴもシートへ色を付けたいです。

複数シートでのコードを教えて下さい。
現在のコードは、
Sub Test1()
Dim i As Long, j As Long
For i = 1 To 3000 '
For j = 1 To 6 '
If WorksheetFunction.CountIf(Range("A1:G100"), Cells(i, j)) > 1 Then
Cells(i, j).Interior.ColorIndex = 40
End If
Next j
Next i
End Sub

としています。
各シートにも検出セル色を付けたいです。
宜しくお願い致します。
・ツリー全体表示

【81081】Re:新しいシートを追加したら特定のシー...
発言  γ  - 19/8/18(日) 23:05 -

引用なし
パスワード
   目次の作成が目的だったのですかね。
どこまでできているのですか。
そして、詰まっているのはどこですか。

そもそもですが、目次って必要ですか?
たぶん、シートの数が多くなったときに、
左右に並んだシートタブでは見つけにくい、というのが出発点ではないですか?

それには、以下の対応策があります。

シートタブの左端に左右の矢印がある箇所がありますね。
その上で、右クリックすれば、多数のシートの場合も、
縦に並んだ一覧が表示されませんか?
内容を表すシート名にしておけば、大抵はそれで用が足りるはずです。
・ツリー全体表示

【81080】Re:新しいシートを追加したら特定のシー...
発言  マナ  - 19/8/18(日) 20:26 -

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

目次の更新は、作業者によるボタンのクリックではだめですか。
ht tps://www.casleyconsulting.co.jp/blog/engineer/3888/
・ツリー全体表示

【81079】Re:新しいシートを追加したら特定のシー...
発言  γ  - 19/8/18(日) 19:17 -

引用なし
パスワード
   分からない点はどこですか?
イベントプロシージャというのはご存じなのですか?

「excel vba newsheet イベント」といったキーワードで
ネット検索するぐらいは、実行されたのでしょうか?
いくつも情報はありますけど。
例えば、こんな記事があります。
ht tps://www.vba-ie.net/event/newsheet.php

VBAのヘルプにも載っています。

ThisWorkbookモジュールに、例えば、
Private Sub Workbook_NewSheet(ByVal Sh As Object)
  MsgBox Sh.Name & " が追加されました。"
End Sub
などとすれば、シートが追加されたときに、メッセージを出します。

シートが追加されたときに、何かをしたい、
という点が質問のポイントですよね。

そのなかでどういう処理をするかについて、
コードを求めているわけではないのでしょう?
全然説明不足ですから、私にはわかりません。

もし万一、それも含めてということなら、
もっと説明しないと、他人にはわかりません。

行を追加するとは具体的にどういうことですか?
もともと行はいくらでもありますよね。
どこに追加するのですか? 
最終行?それとも見出し行の次の行に挿入?

その行には、なにか情報を入れるんでしょうか?シート名とか、作成日とか。
それはそちらでいくらでも対応できそうですけど。
説明もなしに、もっと詳しくと言われても困ります。
・ツリー全体表示

【81078】Re:新しいシートを追加したら特定のシー...
質問  tarotaro  - 19/8/18(日) 16:58 -

引用なし
パスワード
   ▼γ さん:
>下記のイベントプロシージャを使ったらよいと思いますよ。
>> Workbook.NewSheet イベント
>> 新しいシートをブックに作成したときに発生します。

ご回答ありがとうございます!
できればもう少し詳しく教えて頂くことは可能でしょうか。
・ツリー全体表示

【81077】Re:新しいシートを追加したら特定のシー...
回答  γ  - 19/8/17(土) 20:41 -

引用なし
パスワード
   下記のイベントプロシージャを使ったらよいと思いますよ。
> Workbook.NewSheet イベント
> 新しいシートをブックに作成したときに発生します。
・ツリー全体表示

【81076】新しいシートを追加したら特定のシートに...
質問  tarotaro  - 19/8/17(土) 19:06 -

引用なし
パスワード
   例えば
シート1にシートの一覧をつくる。

新しくシートが追加されたら、自動的にシート1に行が追加される

というのを作ることは可能でしょうか。
・ツリー全体表示

【81075】Re:範囲を選択して1セルずつコピー
お礼  riki  - 19/8/14(水) 19:21 -

引用なし
パスワード
   ▼ピンク さん:
>>1分ごとにB2,B3,B4,B5,折り返して
>myTime = Now + TimeValue("00:00:01")
>  ↓に訂正
>myTime = Now + TimeValue("00:01:00")

ご丁寧に回答いただき、ありがとうございます。
さっそく試してみます。
・ツリー全体表示

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