Excel VBA質問箱 IV

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

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


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

【75296】Re:2つのグラフのグループ化
発言  マナ  - 14/2/4(火) 20:32 -

引用なし
パスワード
   こうじゃないですか?
Sheets(1).Shapes.Range(Array(n, n2)).Group
・ツリー全体表示

【75295】2つのグラフのグループ化
質問  まめ  - 14/2/4(火) 11:47 -

引用なし
パスワード
   お世話になります。

バージョン2007を使用しております。
グラフ1とグラフ2をグループ化したいのですが、うまくいきません。

グラフNoは可変なので、それぞれの番号をn, n2として取得しており
以下のようなコードを書きました。

Sheets(1).Shapes.Range(Array("Sheets(1).ChartObjects(n)", "Sheets(1).ChartObjects(n2)")).Group

しかしこれですと、指定した名前のアイテムが見つかりませんでした
というエラーが出てしまいます。

かなり初歩的な質問だとは存じますが、何卒アドバイスいただきたく
よろしくお願いいたします。
・ツリー全体表示

【75294】Re:グラフ軸の指数表示の桁数を変えたい
お礼  まめ  - 14/2/4(火) 9:51 -

引用なし
パスワード
   マナ様
お世話になります。
ご回答いただき誠にありがとうございます。

書いていただいたコードをそのまま試してみたら無事動きました。
どうやら元コードでは.Selectionと無駄なものが頭についていたせいのようでした。

ただの凡ミスだったようです、お騒がせしましたm(_ _)m
ありがとうございました!
・ツリー全体表示

【75293】Re:プロセージャの作成をお願いいたします
お礼  本山中  - 14/2/4(火) 8:40 -

引用なし
パスワード
   ▼kanabun さん:
何度もありがとうございます。
感謝いたします。

>▼本山中 さん:
>
>さらに、別法です。
>フィルターオプションを使わないで、重複カットする方法です。
>(一行目に見出しを必要としない方法です)
>1.まずB列で並び替えます。
>2.すると 重複するものが行で連続しますので、B列を下から見ていって
>  ひとつ上の行と同じ値だったら、この行を空白セルにします。
>3.そうしたら、B列で空白になっているセルを選択して 選択行を一括削除。
>
>以上です。
>
>
>以下にコードを示します。
>前のコードは
>名前を Private Sub Worksheet_BeforeDoubleClickX( _
>か何かに変更しておいて、その下に ↓ をコピーしてください。
>
>Private Sub Worksheet_BeforeDoubleClick( _
>        ByVal Target As Range, Cancel As Boolean)
> If Target.Column = 2 Then
>   Dim i As Long, k As Long
>   Dim v
>   
>   Cancel = True
>   With Range("A1").CurrentRegion
>     .Sort Key1:=.Columns(2), Header:=xlNo
>     v = .Columns(2).Value
>     For i = UBound(v) To 2 Step -1
>       If v(i, 1) = v(i - 1, 1) Then
>         v(i, 1) = Empty
>         k = k + 1
>       End If
>     Next
>     If k > 0 Then
>       .Columns(2).Value = v
>       .Columns(2).SpecialCells(xlBlanks). _
>             EntireRow.Delete '重複行削除
>     End If
>   End With
> End If
>
>End Sub
>
>多少こちらのほうが時間はかかるかもしれません
・ツリー全体表示

【75292】Re:グラフ軸の指数表示の桁数を変えたい
発言  マナ  - 14/2/3(月) 22:54 -

引用なし
パスワード
   少なくとも2010ではエラーにはならないようです
マクロではなく、手動でも設定できないのでしょうか。

Sub test()
  With ActiveChart.Axes(xlCategory)
    .TickLabels.NumberFormatLocal = "0.E+00"
  End With
End Sub
・ツリー全体表示

【75291】Re:プロセージャの作成をお願いいたします
発言  kanabun  - 14/2/3(月) 19:43 -

引用なし
パスワード
   ▼本山中 さん:

さらに、別法です。
フィルターオプションを使わないで、重複カットする方法です。
(一行目に見出しを必要としない方法です)
1.まずB列で並び替えます。
2.すると 重複するものが行で連続しますので、B列を下から見ていって
  ひとつ上の行と同じ値だったら、この行を空白セルにします。
3.そうしたら、B列で空白になっているセルを選択して 選択行を一括削除。

以上です。


以下にコードを示します。
前のコードは
名前を Private Sub Worksheet_BeforeDoubleClickX( _
か何かに変更しておいて、その下に ↓ をコピーしてください。

Private Sub Worksheet_BeforeDoubleClick( _
        ByVal Target As Range, Cancel As Boolean)
 If Target.Column = 2 Then
   Dim i As Long, k As Long
   Dim v
   
   Cancel = True
   With Range("A1").CurrentRegion
     .Sort Key1:=.Columns(2), Header:=xlNo
     v = .Columns(2).Value
     For i = UBound(v) To 2 Step -1
       If v(i, 1) = v(i - 1, 1) Then
         v(i, 1) = Empty
         k = k + 1
       End If
     Next
     If k > 0 Then
       .Columns(2).Value = v
       .Columns(2).SpecialCells(xlBlanks). _
             EntireRow.Delete '重複行削除
     End If
   End With
 End If

End Sub

多少こちらのほうが時間はかかるかもしれません
・ツリー全体表示

【75290】Re:プロセージャの作成をお願いいたします
発言  kanabun  - 14/2/3(月) 19:03 -

引用なし
パスワード
   言い忘れました。

B列をダブルクリックすると、その
> Private Sub Worksheet_BeforeDoubleClick( _
>        ByVal Target As Range, Cancel As Boolean)
マクロが走ります。


もうひとつ言い忘れました。
そのマクロは B列に重複がひとつもないときは
ShowAllData の行でエラーになります。
・ツリー全体表示

【75289】Re:プロセージャの作成をお願いいたします
発言  kanabun  - 14/2/3(月) 19:01 -

引用なし
パスワード
   ▼本山中 さん:

>実行してみたのですが、最初の行(A1,B1,C1,D1の行)だけが
>ダブって残ります。後はうまくいきます。

フィルタをかけるとき、一行目は列見出しと仮定されます。だから、
たとえ一行目が実際はデータだったとしても、Excelは頓着しません。
一行目が見出しでないなら、マクロで見出し行を挿入してやりましょう。

それから、上のマクロ、標準モジュールに置いて実行してみたようですが、
B列をダブルクリックすれば、自動で重複カット・マクロが走るように、
改良してみましょう。

シート見出しを右クリックしてそこの「シートの表示」メニューを選択する
と、シートモジュールが現れます。
そこに、以下をコピーしてください。

'-----------------------------------------------------------
Option Explicit

Private Sub Worksheet_BeforeDoubleClick( _
        ByVal Target As Range, Cancel As Boolean)
 If Target.Column = 2 Then
  Cancel = True
  Rows(1).Insert
  Range("A1:D1").Value = Split("A B C D")
  With Range("A1").CurrentRegion
    .Columns("B").AdvancedFilter xlFilterInPlace, Unique:=True
    .Copy Range("E1")
    .Worksheet.ShowAllData
    .EntireColumn.Delete
  End With
  With Range("A1").CurrentRegion
    .Sort Key1:=.Columns("B"), Header:=xlYes
  End With
  Rows(1).Delete
 End If

End Sub
・ツリー全体表示

【75288】Re:プロセージャの作成をお願いいたします
質問  本山中  - 14/2/3(月) 17:33 -

引用なし
パスワード
   ▼kanabun さん:
回答、感謝いたします。
実行してみたのですが、最初の行(A1,B1,C1,D1の行)だけが
ダブって残ります。後はうまくいきます。
10時のデータ A1,B1,C1,D1 の次の行に
12時のデータが A2,B2,C2,D2 として来てしまう状況です。
>▼本山中 さん:
>
>>3.B列には4桁の数値が入力されています。
>>このとき、B列の数値を利用して、12時に入力したデータのうち
>>10時に入力した数値と同じものがあれば、12時のデータの行を削除し、
>>空行を生じさせないよう、上へ詰める。
>>尚且つ、B列の数値を利用して常に昇順にデータを並び変えておく。
>
>マクロ内容としては、
>1.B列にフィルタオプションをかけて重複カットし、
>2.その状態での表をE列以降にコピーしてから、
>3.元のA〜D列を削除
>4.新しい A〜D列にたいして B列をキーにSortをかける
>
>  With Range("A1").CurrentRegion
>    .Columns("B").AdvancedFilter xlFilterInPlace, Unique:=True
>    .Copy Range("E1")
>    .Worksheet.ShowAllData
>    .EntireColumn.Delete
>  End With
>  With Range("A1").CurrentRegion
>    .Sort Key1:=.Columns("B"), Header:=xlYes
>  End With
>
>のような感じでよろしいかと思います。
>
>決めなければいけないのは、
>このマクロをどういうタイミングでマクロを実行するか、ですが。
>たとえば、B列をダブルクリックしたら、マクロを実行する、とか?
・ツリー全体表示

【75287】グラフ軸の指数表示の桁数を変えたい
質問  まめ  - 14/2/3(月) 16:45 -

引用なし
パスワード
   お世話になります。
VBAで散布図を作成しています。バージョンは2007です。

グラフの元データとなるセルはセルの書式設定により
小数点以下2桁の指数表示にしてあります。
 → 1.00E+05 のような感じ

ですが、グラフの軸目盛の方は煩雑になるのを避けるために
小数点以下0桁の指数表示にしたいです。
 → 1.E+05 のような感じ

そこでマクロの記録を参考に、以下のようなコードを書きました。
Selection.TickLabels.NumberFormatLocal = "0.E+00"

しかし、オブジェクトはこのプロパティまたはメソッドをサポートしていません
と表示されてしまいます。
(元データの表示を小数点以下0桁に変更してやればエラーにはならないのですが)

どのようにすれば元データの表示を変えずして、グラフ軸の表示のみを
変えることができるでしょうか。
ご回答のほど何卒よろしくお願いいたします。
・ツリー全体表示

【75286】Re:プロセージャの作成をお願いいたします
発言  kanabun  - 14/2/3(月) 14:59 -

引用なし
パスワード
   ▼本山中 さん:

>3.B列には4桁の数値が入力されています。
>このとき、B列の数値を利用して、12時に入力したデータのうち
>10時に入力した数値と同じものがあれば、12時のデータの行を削除し、
>空行を生じさせないよう、上へ詰める。
>尚且つ、B列の数値を利用して常に昇順にデータを並び変えておく。

マクロ内容としては、
1.B列にフィルタオプションをかけて重複カットし、
2.その状態での表をE列以降にコピーしてから、
3.元のA〜D列を削除
4.新しい A〜D列にたいして B列をキーにSortをかける

  With Range("A1").CurrentRegion
    .Columns("B").AdvancedFilter xlFilterInPlace, Unique:=True
    .Copy Range("E1")
    .Worksheet.ShowAllData
    .EntireColumn.Delete
  End With
  With Range("A1").CurrentRegion
    .Sort Key1:=.Columns("B"), Header:=xlYes
  End With

のような感じでよろしいかと思います。

決めなければいけないのは、
このマクロをどういうタイミングでマクロを実行するか、ですが。
たとえば、B列をダブルクリックしたら、マクロを実行する、とか?
・ツリー全体表示

【75285】プロセージャの作成をお願いいたします
質問  本山中  - 14/2/3(月) 9:34 -

引用なし
パスワード
   次の作業が行えるプロセージャを教えてください。
1.10時に、A1〜D10にデータを入力します。
2.12時に、A11〜D15にデータを入力します。
3.B列には4桁の数値が入力されています。
このとき、B列の数値を利用して、12時に入力したデータのうち
10時に入力した数値と同じものがあれば、12時のデータの行を削除し、
空行を生じさせないよう、上へ詰める。
尚且つ、B列の数値を利用して常に昇順にデータを並び変えておく。
データの数が相当あるため、手動処理では時間がかかりすぎます。
宜しくお願いいたします。
・ツリー全体表示

【75284】Re:シートコピー後、図形に登録されたマ...
発言  kuro  - 14/2/2(日) 20:15 -

引用なし
パスワード
   セキュリティレベルを色々変えて試してみました。

結果,
"すべてのマクロを有効にする"にするか"デジタル署名されたマクロを除き…"にし"信頼できる発行元"に指定されている場合に警告文なしでマクロが実行されるようです。

企業のPCのセキュリティレベルが低く設定されているとは考えにくいので,マクロにデジタル署名されているのではないでしょうか?
・ツリー全体表示

【75283】Re:シートコピー後、図形に登録されたマ...
お礼  ヤマネコ  - 14/2/2(日) 0:04 -

引用なし
パスワード
   ご助言をありがとうございました。

あれからまた、ご助言も参考にしながら、あれこれと試してみましたが、どうもうまくいきません。理解不能です。
(ちなみに職場では、強力なセキュリティ牙城の中のサーバーで仕事をすることになるので、出し入れは不可なのです。全部、手動でコピーして再入力しなけりゃ比較することもままならない状態なのです。(愚痴でした。))

当面あきらめます。他の手を考えます。
ありがとうございました。

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

【75282】Re:特定の文字内の値抽出
お礼  VBA初心者  - 14/2/1(土) 8:59 -

引用なし
パスワード
   遅くなりすみません。

マクロが2種類となりましたが、目的は達成できました。
ありがとうございました。

Sub Sgy1()
Dim GYo As Long
Dim myStr As String
Dim tmp As Variant

For GYo = 6 To 10000
If Cells(GYo, 4).Value = 1 Then
myStr = Cells(GYo - 2, 4).Value
tmp = Split(Cells(GYo - 2, 4), " ")
Cells(GYo, 1) = tmp(0)
Cells(GYo, 2).Value = Mid(myStr, InStr(myStr, " ") + 2, InStr(myStr, "年") - InStr(myStr, " ") - 2)
Cells(GYo, 3).Value = Mid(myStr, InStr(myStr, "年") + 1, InStr(myStr, "月") - InStr(myStr, "年") - 1)

 End If
  Next GYo
End Sub


Sub Sgyo2()
Dim GYo As Long
Dim myStr As String
Dim tmp As Variant

For GYo = 6 To 10000
If 1 < Cells(GYo, 4).Value And Cells(GYo, 4).Value <= 100 Then
Cells(GYo, 1).Value = Cells(GYo - 1, 1).Value
Cells(GYo, 2).Value = Cells(GYo - 1, 2).Value
Cells(GYo, 3).Value = Cells(GYo - 1, 3).Value

 End If
  Next GYo
End Sub
・ツリー全体表示

【75281】Re:Scripting.Dictionaryで色の判定につ...
発言  kanabun  - 14/1/30(木) 11:24 -

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

範囲を変数に入れておいて、ColorIndex を調べたらどうでしょ

>  '●別シートに集計内容出力(部課計)
>
   Dim r As Range '●追加
>  Dim vnt, A
>  Dim dic As Object
>  
>  '
>  With Sheets("作業")
    Set r = .Range("Z2", .Range("A65536").End(xlUp))
     vnt = r.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(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 r(i, 12).Interior.Color <> 15773696 Then
>       A(2) = A(2) + vnt(i, 12)
>    End If

>    dic(vnt(i, 9)) = A
>  Next i
・ツリー全体表示

【75280】Re:Scripting.Dictionaryで色の判定につ...
回答  ウッシ  - 14/1/29(水) 19:45 -

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

こんばんは

削除してもあまり影響無いですけど、
Set vnt = Nothing
に置き換えてください。


>▼ウッシ さん:
>
>こんにちは
>
>Erase vntの箇所でエラーがでます。
>
>回避方法教えてください
・ツリー全体表示

【75279】Re:Scripting.Dictionaryで色の判定につ...
質問  初心者  - 14/1/29(水) 18:14 -

引用なし
パスワード
   ▼ウッシ さん:

こんにちは

Erase vntの箇所でエラーがでます。

回避方法教えてください
・ツリー全体表示

【75278】Re:Scripting.Dictionaryで色の判定につ...
回答  ウッシ  - 14/1/29(水) 11:41 -

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

こんにちは

UBound(vnt, 1)を、vnt.Rows.Count にしてみて下さい。


>▼ウッシ さん:
>
>連絡ありがとうございます。
>
>Dim vnt As Range として
>Set vnt = .Range("Z2", .Range("A65536").End(xlUp))
>
>と変更して試してみるとどうなりますか?
>
>試したところ、以下の箇所で配列がありませんと出ます。
>
>For i = 1 To UBound(vnt, 1)
>
>
> Dim A
>  Dim dic As Object
>  
>  Dim vnt As Range
>  
>
>  Windows("MT第七.xls").Activate
>  Sheets("作業").Select
>  Range("A1").Select
> 
>  With Sheets("作業")
>   Set vnt = .Range("Z2", .Range("A65536").End(xlUp))
>  End With
>  
>  '
>  ''With Sheets("作業")
>  ''  vnt = .Range("Z2", .Range("A65536").End(xlUp)).Value
>  ''   ''Set vnt = .Range("Z2", .Range("A65536").End(xlUp))
>  ''End With
>  
>  '
・ツリー全体表示

【75277】Re:Scripting.Dictionaryで色の判定につ...
質問  初心者  - 14/1/29(水) 11:36 -

引用なし
パスワード
   ▼ウッシ さん:

連絡ありがとうございます。

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

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

試したところ、以下の箇所で配列がありませんと出ます。

For i = 1 To UBound(vnt, 1)


 Dim A
  Dim dic As Object
  
  Dim vnt As Range
  

  Windows("MT第七.xls").Activate
  Sheets("作業").Select
  Range("A1").Select
 
  With Sheets("作業")
   Set vnt = .Range("Z2", .Range("A65536").End(xlUp))
  End With
  
  '
  ''With Sheets("作業")
  ''  vnt = .Range("Z2", .Range("A65536").End(xlUp)).Value
  ''   ''Set vnt = .Range("Z2", .Range("A65536").End(xlUp))
  ''End With
  
  '
・ツリー全体表示

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