Excel VBA質問箱 IV

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

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


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

【75276】Re:シートコピー後、図形に登録されたマ...
回答  ウッシ  - 14/1/29(水) 8:19 -

引用なし
パスワード
   ▼ヤマネコ さん:

こんにちは

図形に登録したマクロはファイルパス込みで保存されるようです。
会社と自宅で元のファイルの置き場所(ドライブ、フォルダ構成)を統一すれば
どちらでも動くと思うので試して下さい。

逆に言うと、マクロブックを自宅に持ち帰り、図形をクリックして「新ブック.xls」
を作成してから、それを開いて図形をクリックすればマクロ実行出来ると思います。


>或るワークシートに表があります。
>その表の脇には図形も配置して、その図形には
>その表をソートさせるマクロを登録しました。そのマクロは標準モジュールに記述してあります。
>ここまでは、動作は良好です。
>問題はこの先です。
>
>このワークシートをVBAで、コピーし、新規ブックに(名前を付けて保存)してみますと、
>自宅のPC上と、職場のPC上とでは、結果が異なり悩んでいます。
>
> ThisWorkbook.WorkSheets(“コピー元”).Copy
>    ActiveWorkbook.SaveAs Filename:= “新ブック” & “.xls ” , FileFormat:= xlNormal
>
>自宅の場合、「新ブック」にコピーされた、【図形ボタン】をクリックすると、マクロは実行できないというメッセージが出ます。(新ブックにはマクロが存在しないにも関わらず、このコピーされた【図形ボタン】は、新ブックに含まれるマクロを実行しようとしているからです。)
>一方職場では、「新ブック」の【図形ボタン】をクリックすると、コピー元のブックのマクロを実行することができてしまいます。(コピー元のブックが開いてない場合は自動的に開かせることまでできます。)
>
>1.この違いはどこにあるのでしょうか?
>2.この設定の違いを自在に操るにはどうしたら良いのでしょうか?
>
>の2点を教えていただきたいと思っています。
>(今回求めているのは、どの環境でも安定して、コピー元のマクロを実行させること(後者)です。マクロをシートモジュールに記述しなかったのはそのためです。)
>どうぞよろしくお願いします。
・ツリー全体表示

【75275】Re:特定の文字内の値抽出
発言  γ  - 14/1/28(火) 22:08 -

引用なし
パスワード
   追記ありがとうございました。
念のため、仕上がりの例も示してください。

また、提示したコードはわかりますか?
その後の状況をお知らせください。
・ツリー全体表示

【75274】Re:Scripting.Dictionaryで色の判定につ...
回答  ウッシ  - 14/1/28(火) 17:20 -

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

こんにちは

Dim vnt As Range として
Set vnt = .Range("Z2", .Range("A65536").End(xlUp))

と変更して試してみるとどうなりますか?


>教えてください。
>
>あるシートの項目をキーにScripting.Dictionaryを利用して
>集計処理しています。
>
>このScripting.Dictionaryの処理の途中でセルの色の判定は
>できるのか教えてください。
>
>  '●別シートに集計内容出力(部課計)
>
>  Dim vnt, A
>  Dim dic As Object
>  
>  '
>  With Sheets("作業")
>    vnt = .Range("Z2", .Range("A65536").End(xlUp)).Value
>  End With
>  '
>  Set dic = CreateObject("Scripting.Dictionary")
>  For i = 1 To UBound(vnt, 1)
>    If Not dic.exists(vnt(i, 9)) Then
>      ReDim A(11)
>      A(0) = vnt(i, 9)
>      ''a(2) = vnt(i, 18)
>      A(4) = vnt(i, 4)
>      A(7) = vnt(i, 22)
>      A(8) = wk2
>      A(9) = wk3
>    Else
>    
>    
>    A = dic(vnt(i, 9))
>    
>    End If
>    
>    A(1) = A(1) + vnt(i, 17)
>    A(3) = A(3) + vnt(i, 19)
>    A(5) = A(5) + vnt(i, 20)
>    A(6) = A(6) + vnt(i, 21)
>    
>    '★ここの箇所のように色の条件付けをしたい。'
>    If vnt(i, 12).Interior.Color <> 15773696 Then
>    
>      A(2) = A(2) + vnt(i, 12)
>    End If
>    '===============================================
>        
>    dic(vnt(i, 9)) = A
>  Next i
>  
>  '-----結果出力
>  With Sheets("作業2")
>    .Cells.ClearContents
>    .Range("A1").Resize(, 10).Value = Array("形名略称", "数量", "当社計上額", "金額", "注文番号", "税額", "税込金額", "部課", "コメント", "担当者コード", "当社計上金額")
>    .Range("A2").Resize(dic.Count, 10).Value = Application _
>          .Transpose(Application.Transpose(dic.items))
>    .Select
>  End With
>  '
>  Erase vnt
>  Set dic = Nothing
>
>
>(CStr(Cells(i, 16).Interior.Color) <> 15773696
・ツリー全体表示

【75273】Scripting.Dictionaryで色の判定について
質問  初心者  - 14/1/28(火) 12:00 -

引用なし
パスワード
   教えてください。

あるシートの項目をキーにScripting.Dictionaryを利用して
集計処理しています。

このScripting.Dictionaryの処理の途中でセルの色の判定は
できるのか教えてください。

  '●別シートに集計内容出力(部課計)

  Dim vnt, A
  Dim dic As Object
  
  '
  With Sheets("作業")
    vnt = .Range("Z2", .Range("A65536").End(xlUp)).Value
  End With
  '
  Set dic = CreateObject("Scripting.Dictionary")
  For i = 1 To UBound(vnt, 1)
    If Not dic.exists(vnt(i, 9)) Then
      ReDim A(11)
      A(0) = vnt(i, 9)
      ''a(2) = vnt(i, 18)
      A(4) = vnt(i, 4)
      A(7) = vnt(i, 22)
      A(8) = wk2
      A(9) = wk3
    Else
    
    
    A = dic(vnt(i, 9))
    
    End If
    
    A(1) = A(1) + vnt(i, 17)
    A(3) = A(3) + vnt(i, 19)
    A(5) = A(5) + vnt(i, 20)
    A(6) = A(6) + vnt(i, 21)
    
    '★ここの箇所のように色の条件付けをしたい。'
    If vnt(i, 12).Interior.Color <> 15773696 Then
    
      A(2) = A(2) + vnt(i, 12)
    End If
    '===============================================
        
    dic(vnt(i, 9)) = A
  Next i
  
  '-----結果出力
  With Sheets("作業2")
    .Cells.ClearContents
    .Range("A1").Resize(, 10).Value = Array("形名略称", "数量", "当社計上額", "金額", "注文番号", "税額", "税込金額", "部課", "コメント", "担当者コード", "当社計上金額")
    .Range("A2").Resize(dic.Count, 10).Value = Application _
          .Transpose(Application.Transpose(dic.items))
    .Select
  End With
  '
  Erase vnt
  Set dic = Nothing


(CStr(Cells(i, 16).Interior.Color) <> 15773696
・ツリー全体表示

【75272】Re:セルの選択
お礼  Liz  - 14/1/27(月) 15:33 -

引用なし
パスワード
   マナさん
有り難うございます。

返事が遅くなってすみません
参考サイトをみて試行しておりますが 技量不足のようです。

もう少し勉強してみます。
・ツリー全体表示

【75271】Re:特定の文字内の値抽出
質問  VBA初心者  - 14/1/26(日) 10:39 -

引用なし
パスワード
   γさん ありがとうございます。
表について追記します。

・条件
行番行は一定ではありません。
○○ 2011年9月 
△△n XXnn年MM月
□□□ XXXX年MM月
の文字の2行下に』『D列に1』の値があるだけです。

・表

行番号 A列 B列 C列   D列      E列
1             ○○ 2011年9月    
2             番号      数量        
3              1        1001.7
4              2        1013.8
5              3        1011.1
n              n        1010.4
n+1            △△n XXnn年MM月
n+2             番号      数量
n+3             1          1.7
n+4             2         100.0
n+5             3         32.0
n+6
・ツリー全体表示

【75270】Re:1000ごとにデータをばらしたい
お礼  ラッキー  - 14/1/26(日) 10:26 -

引用なし
パスワード
   おおお・・・!
素晴らしいです
コードの内容を見てなるほどな〜と感心してしまったと同時に
自分の頭の固さに絶望しました・・・

この素晴らしいコードを元に頑張って作成していきたいと思います。
どうもありがとうございました!
・ツリー全体表示

【75269】Re:特定の文字内の値抽出
発言  γ  - 14/1/26(日) 9:39 -

引用なし
パスワード
   こんにちは。
「 番号       数量  」
以下のデータは、何列の何行目にあるのですか?
行のことも誤解の無いように書いたほうがいいですね。

繰り返し処理のなかで、
文字列を分解する必要がある場所かどうかは、
文字列中に"年" がふくまれているかどうかで判定します。
If InStr(s,"年") > 0 Then といった書き方です。

文字列を分解する部分は下のコードを参考にしてください。
繰り返しの処理はご自分で組み立ててみてください。

Sub test()
  Dim s As String
  Dim ary
  Dim s1 As String
  Dim s2 As String
  Dim s3 As String
  Dim s4 As String

  s = "○○ 2011年9月"
  ary = Split(s, " ", 2) 'スペースが二つ以上あることも考慮。

  s1 = ary(0)           '' "○○"
  s2 = Trim(ary(1))        '' "2011年9月"

  ary = Split(s2, "年")
  s3 = ary(0)           '' "2011"
  s4 = Replace(ary(1), "月", "") '' "9"

End Sub
・ツリー全体表示

【75268】Re:1000ごとにデータをばらしたい
回答  ウッシ  - 14/1/25(土) 23:21 -

引用なし
パスワード
   ▼ラッキー さん:

こんばんは

Sub test()
  Dim Sh1 As Worksheet
  Dim Sh2 As Worksheet
  Dim Sh3 As Worksheet
  Dim r  As Range
  Dim t  As Variant
  Dim h  As Long
  Dim i  As Long
  Dim j  As Long
  
  Set Sh1 = ThisWorkbook.Worksheets("Sheet1") '元データ
  Set Sh2 = ThisWorkbook.Worksheets("Sheet2") '転記先シート セルB1「start」、C1「end」
  Set Sh3 = ThisWorkbook.Worksheets("Sheet3") 'テーブル
  
  Application.ScreenUpdating = False
  
  Sh2.UsedRange.ClearContents
  Sh2.Range("B1").Value = "start"
  Sh2.Range("C1").Value = "end"
  
  Call テーブル作成(Sh3, WorksheetFunction.Max(Sh1.Columns(2)))
      
  h = 2
  For Each r In Sh1.Range("B1", Sh1.Range("B" & Rows.Count).End(xlUp))
    t = Application.Match(r.Value, Sh3.Columns(2), 1)
    If IsError(t) Then
      Sh2.Cells(h, 1) = r.Offset(0, -1).Value
      Sh2.Cells(h, 2) = 1
      Sh2.Cells(h, 3) = r.Value
    Else
      If Sh3.Cells(t, 2) = r.Value Then
        i = t
      Else
        i = t + 1
      End If
      Sh2.Cells(h, 1).Resize(i) = r.Offset(0, -1).Value
      Sh2.Cells(h, 2).Resize(i, 2) = _
        Sh3.Range("A1").Resize(i, 2).Value
      Sh2.Cells(h + i - 1, 3) = r.Value
    End If
    h = Sh2.Range("A" & Rows.Count).End(xlUp).Row + 1
  Next
  
  Application.ScreenUpdating = True
  
End Sub

Sub テーブル作成(sh As Worksheet, v As Long)
  Dim x As Long
  x = Round(v / 1000) + 1
  With sh
    .UsedRange.ClearContents
    .Range("A1").Value = "1"
    .Range("A2").Value = "1001"
    .Range("B1").Value = "1000"
    .Range("B2").Value = "2000"
    If x > 2 Then
      .Range("A1:A2").AutoFill Destination:=.Range("A1:A" & x), Type:=xlFillDefault
      .Range("B1:B2").AutoFill Destination:=.Range("B1:B" & x), Type:=xlFillDefault
    End If
  End With
End Sub


>とても悩んでいるので教えて下さい。
>
>A 2500
>B 1300
>C 200
>
>のような表があります。
>それを
>
>  start  end
>A   1  1000
>A  1001  2000
>A  2001  2500
>B   1  1000
>B  1001  1300
>C   1  200
>
>というように1000単位でばらした表を作成したいのですが、
>とっかかりすら思いつきません。
>どうかお知恵をお貸しくださいませ。
・ツリー全体表示

【75267】1000ごとにデータをばらしたい
質問  ラッキー  - 14/1/25(土) 21:46 -

引用なし
パスワード
   とても悩んでいるので教えて下さい。

A 2500
B 1300
C 200

のような表があります。
それを

  start  end
A   1  1000
A  1001  2000
A  2001  2500
B   1  1000
B  1001  1300
C   1  200

というように1000単位でばらした表を作成したいのですが、
とっかかりすら思いつきません。
どうかお知恵をお貸しくださいませ。
・ツリー全体表示

【75266】特定の文字内の値抽出
質問  VBA初心者  - 14/1/25(土) 20:59 -

引用なし
パスワード
   教えて下さい。


シート内に、『D列に○○ 2011年9月”、”△△ XXXX年MM月』別にn個のデータが複数ありそれぞれに『A列に○○又は△△n』『B列に2011又はXXnn』△△n』『C列に9又はMM』に埋め込みたいのですが。


・表

 A列 B列 C列   D列       E列
           ○○ 2011年9月    
             番号       数量        
            1           1001.7
            2           1013.8
            3           1011.1
            n           1010.4
         
          △△n XXnn年MM月
            1          1.7
            2         100.0
            3         32.0
            n         25.8
         
          □□□ XXXX年MM月
            1          1.7
            2         100.0
            3         32.0
            n         25.8
  
・ツリー全体表示

【75265】シートコピー後、図形に登録されたマクロ...
質問  ヤマネコ  - 14/1/25(土) 20:24 -

引用なし
パスワード
   或るワークシートに表があります。
その表の脇には図形も配置して、その図形には
その表をソートさせるマクロを登録しました。そのマクロは標準モジュールに記述してあります。
ここまでは、動作は良好です。
問題はこの先です。

このワークシートをVBAで、コピーし、新規ブックに(名前を付けて保存)してみますと、
自宅のPC上と、職場のPC上とでは、結果が異なり悩んでいます。

ThisWorkbook.WorkSheets(“コピー元”).Copy
    ActiveWorkbook.SaveAs Filename:= “新ブック” & “.xls ” , FileFormat:= xlNormal

自宅の場合、「新ブック」にコピーされた、【図形ボタン】をクリックすると、マクロは実行できないというメッセージが出ます。(新ブックにはマクロが存在しないにも関わらず、このコピーされた【図形ボタン】は、新ブックに含まれるマクロを実行しようとしているからです。)
一方職場では、「新ブック」の【図形ボタン】をクリックすると、コピー元のブックのマクロを実行することができてしまいます。(コピー元のブックが開いてない場合は自動的に開かせることまでできます。)

1.この違いはどこにあるのでしょうか?
2.この設定の違いを自在に操るにはどうしたら良いのでしょうか?

の2点を教えていただきたいと思っています。
(今回求めているのは、どの環境でも安定して、コピー元のマクロを実行させること(後者)です。マクロをシートモジュールに記述しなかったのはそのためです。)
どうぞよろしくお願いします。
・ツリー全体表示

【75264】Re:多数のブックより値を取得し、表を作成
お礼  駆け出し初心者  - 14/1/25(土) 16:34 -

引用なし
パスワード
   γ さん
回答頂きありがとうございます。

ピボットテーブル全然思いつかなかったです、、、
γ さんのおっしゃるようにデータ取り込みから
やってみたいと思います。
ありがとうございました。

▼γ さん:
>ああ、間違い。↓のほうが扱い易いですね。
>月    名前    勤務時間
>4月    A    160
>4月    B    152
>5月    A    152
>5月    B    160
>6月    A    160
>6月    B    160
>6月    C    160
・ツリー全体表示

【75263】Re:多数のブックより値を取得し、表を作成
発言  γ  - 14/1/24(金) 20:18 -

引用なし
パスワード
   ああ、間違い。↓のほうが扱い易いですね。
月    名前    勤務時間
4月    A    160
4月    B    152
5月    A    152
5月    B    160
6月    A    160
6月    B    160
6月    C    160
・ツリー全体表示

【75262】Re:多数のブックより値を取得し、表を作成
発言  γ  - 14/1/24(金) 20:01 -

引用なし
パスワード
   名前  月   勤務時間
A    4月   160
B    4月   152
A    5月   152
B    5月   160
A    6月   160
B    6月   160
C    6月   160

のようにデータを取り込みます。

これにピボットテーブルを使えば、

    4月   5月   6月   総計
A    160   152   160   472
B    152   160   160   472
C             160   160
総計  312   312   480   1104

のような表が出来ると思います。
これをマクロで実行するように工夫してみては?
・ツリー全体表示

【75261】Re:多数のブックより値を取得し、表を作成
質問  駆け出し初心者  - 14/1/24(金) 11:31 -

引用なし
パスワード
   投稿してしまったため、追記です。

simei(0)、4kinmu(0)、5kinmu(0)ともにAさん
simei(1)、4kinmu(1)、5kinmu(1)ともにBさん

'4月
for i = 0 to 50
simei(i) = 4月ブック
4kinmu(i) = 4月ブック
next i

'5月以降
for i = 0 to 50
if simei(i) = 5月ブック名前
   5kinmu(i) = 5月ブック
endif
next i

としたいのですが、4月を基本としているため、4月の名前と
その他ブックの名前を比較したとき、ない名前だと入れることが
できなくなっております。

わかりにくい説明で申し訳ないのですが、
宜しくお願いします。
・ツリー全体表示

【75260】多数のブックより値を取得し、表を作成
質問  駆け出し初心者  - 14/1/24(金) 11:05 -

引用なし
パスワード
   いいアイディアが思い浮かばなかったので
是非、アイディアをください。

複数のブックから値を取得して、それをもとに表を作成したいのですが



名前  4月勤務状況 5月勤務状況 6月勤務状況
A     160     152     160
B     152     160     160
C                  160

名前と勤務状況が各月のブックからの取得となります。
4月勤務状況ブック、5月勤務状況ブックと別れています。
そして、名前、4勤務状況・・・はそれぞれの変数に
格納します。
simei(50)・・・4月ブック,5月ブック,,,,,,,
4kinmu(50)・・・4月ブック
5kinmu(50)・・・5月ブック

ここでわからないことですが、表のCのように6月より名前が
上がってきた場合、simei(50)にどのように入れたらいいかと
いうことです。for文で配列の部分は同じ番地にしたいため、
いいアイディアが思い浮かびません。
なにとぞ、お知恵をお貸しください。
宜しくお願い致します。
・ツリー全体表示

【75258】Re:Excel2003で置換について教えて下さい...
回答  おじさん  - 14/1/22(水) 23:42 -

引用なし
パスワード
   ▼sp さん:
Sub Macro1()
'
' Macro1 Macro
'
'
Dim Tokuisaki As String
Dim Hizuke_Count As Integer
Dim Meisai_gyou As Integer

Tokuisaki = ""
Hizuke_Count = 0
Meisai_gyou = 0
Sheet1.Cells(1, 1).Select

For i = 1 To Sheet1.Cells(Rows.Count, ActiveCell.Column).End(xlUp).Row
 If Sheet1.Cells(i, 4).Value = Tokuisaki Then
  Meisai_gyou = Meisai_gyou + 1
  Sheet1.Cells(i, 1).Value = Sheet1.Cells(i, 1).Value + 10
  Sheet1.Cells(i, 2).Value = Format(Date, "yyyy/mm/dd") & Format(Hizuke_Count, "000")
  Sheet1.Cells(i, 3).Value = "'" + Format(Meisai_gyou, "000")
 Else
  Tokuisaki = Sheet1.Cells(i, 4).Value
  Hizuke_Count = Hizuke_Count + 1
  Meisai_gyou = 1
  Sheet1.Cells(i, 1).Value = Sheet1.Cells(i, 1).Value + 10
  Sheet1.Cells(i, 2).Value = Format(Date, "yyyy/mm/dd") & Format(Hizuke_Count, "000")
  Sheet1.Cells(i, 3).Value = "'" + Format(Meisai_gyou, "000")
 End If
Next i

End Sub

こんな感じで、どうでしょうか。
・ツリー全体表示

【75257】Re:外部アプリケーションの位置、サイズ...
お礼  亜矢  - 14/1/22(水) 10:45 -

引用なし
パスワード
   ▼kanabun さん:
>▼亜矢 さん:
>こんにちは〜
>
>こちらは参考になりませんか?
>ht tp://www.moug.net/tech/acvba/0010014.html
上記のサイトを参考にして解決しました。
ありがとうございました。
・ツリー全体表示

【75256】Re:外部アプリケーションの位置、サイズ...
発言  Yuki  - 14/1/22(水) 10:38 -

引用なし
パスワード
   ▼亜矢 さん:
>いつもお世話になります。
>開いている外部アプリケーションを指定した位置と指定したサイズに
>設定する方法を教えて頂きたいと思います。 

こんな感じで

Private Declare Function SetWindowPos Lib "user32.dll" _
              (ByVal hWnd As Long, _
              ByVal hWndInsertAfter As Long, _
              ByVal x As Long, _
              ByVal y As Long, _
              ByVal cx As Long, _
              ByVal cy As Long, _
              ByVal uFlags As Long) As Long

Private Const SWP_NOSIZE = &H1
Private Const SWP_NOMOVE = &H2
Private Const SWP_NOZORDER = &H4
Private Const SWP_NOACTIVATE = &H10

Sub TESTa()
  Dim hWnd  As Long
  Dim lngRtn As Long
  Dim lngpX  As Long
  Dim lngpY  As Long
  Dim lngdX  As Long
  Dim lngdY  As Long
 
  lngpX = 100   '位置
  lngpY = 100
  lngdX = 200   '大きさ
  lngdY = 200
'  hwnd = Window Handle
  
  lngRtn = SetWindowPos(hWnd, _
             0, _
             lngpX, _
             lngpY, _
             lngdX, _
             lngdY, _
             SWP_NOZORDER Or _
             SWP_NOACTIVATE)
End Sub
・ツリー全体表示

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