Excel VBA質問箱 IV

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

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


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

【76897】Re:Sort文について
発言  β  - 15/4/5(日) 9:24 -

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

おはようございます

とりあえず、MSの公式な説明ページです。

h tps://msdn.microsoft.com/ja-jp/library/office/ff821877.aspx

このページの左に、プロパティやメソッドと書かれているところをクリックしますと
様々なメンバーについての説明がでてきます。
さらに、左の個々のメンバーをクリックすると、その詳細説明がでてきます。
・ツリー全体表示

【76896】Re:Sort文について
発言  γ  - 15/4/5(日) 5:25 -

引用なし
パスワード
   ▼亜矢 さん:
>上の文の中でWithとEnd withの間の文は何を意味しているか教えてください。
>また削除して問題が無いかも教えて頂きたいと思います。

まずは Sortオブジェクトのヘルプを読んで、
それぞれのプロパティやメソッドの意味を勉強しましょう。
そのうえで不明な点を質問して下さい。

なお、削除できるものがあるかどうか、
あなたがどのようなソートをしようとしているかに
依存しますので、一律の判定はできないと思います。

もちろん .Applyなんかを削除したらダメなことは自明ですが、
それ以外のプロパティの話ですよね。
少しばかり削除して問題が起きるより、
そのまま使うという方針もあります。
・ツリー全体表示

【76895】Sort文について
質問  亜矢  - 15/4/5(日) 5:04 -

引用なし
パスワード
   お世話になります。マクロの記録を改良して下記のソート文を利用しております
Application.ScreenUpdating = False
   PL = Range("B50000").End(xlUp).Row
  
   Range(Cells(6, 1), Cells(PL, 68)).Select
   ActiveWorkbook.Worksheets("Sheet4").Sort.SortFields.Clear
   ActiveWorkbook.Worksheets("Sheet4").Sort.SortFields.Add Key:=Range(Cells(6, 18), Cells(PL, 18)) _
    , SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal
  
  With ActiveWorkbook.Worksheets("Sheet4").Sort
    .SetRange Range(Cells(6, 1), Cells(PL, 68))
    .Header = xlGuess
    .MatchCase = False
    .Orientation = xlTopToBottom
    .SortMethod = xlPinYin
    .Apply
  End With
上の文の中でWithとEnd withの間の文は何を意味しているか教えてください。
また削除して問題が無いかも教えて頂きたいと思います。
・ツリー全体表示

【76894】Re:結合セルの参照元トレース
お礼  gg56  - 15/4/3(金) 20:17 -

引用なし
パスワード
   βさま
少し加工してコードを使わせていただきました。
狙い通りの挙動が確認できました。
ありがとうございます。
・ツリー全体表示

【76893】Re:リストボックスの作成について
発言  β  - 15/4/3(金) 15:47 -

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

↑ で、「左上」とかきたところ、間違いです。「右上」が正しいので、読み変えてください。
・ツリー全体表示

【76892】Re:リストボックスの作成について
発言  β  - 15/4/3(金) 15:43 -

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

事前準備の手順もすべて事細かに・・というと荷が重いですが
なんとか、できるだけわかりやすいコメントとするように努力します。

1.まず、シート上のどこかに、リストボックスに表示したい内容を、縦に入力してください。
  これは別シートでも構いません。
2.で、操作するシート上で。
 1)開発タブをクリックしてください。
 2)開発タブにある挿入を選んでください。
 3)でてきたダイアログ、下半分のActiveXコントロールからリストボックスを選んでください。
   (左から4番目だと思います)
 4)それを、シート上の適当な場所に貼り付けます。大きさは適当に。
 5)そのリストボックスを右クリック、プロパティを選んでください。
 6)プロパティウィンドウの中の ListFIllRange に 1.でセットした領域をいれてください。
   A1:A10 とか Sheet2!A1:A10 とか。
 7)MultiSelect を 2 fmMultiSelectExtended か 1 fmMultiSelectMulti にしてください。
   (これによって複数選択時の操作が異なります。詳しくは以下を参照してください)
   ht p://officetanaka.net/excel/vba/tips/tips144.htm
 8)Visible を False にしてください。
 9)プロパティウィンドウを左上のXボタンで閉じてください。
3.開発タブ上のデザインモードが強調表示になっていますので、これをクリックしてデザインモードを終了。
  リストボックスが消えましたね。
4.シートタブを右クリックしてコードの表示を選んでください。
  でてきたところ(VBE画面、シートモジュール)に下にアップするコードを貼り付け、VBE画面の
  左上のXボタンでVBE画面を閉じてください。

これで、任意のセルでダブルクリックすると、その右側にリストボックスが表示され、そこで選択したものが
ダブルクリックしたセル以降に転記されます。
他のセルをクリックするとリストボックスが消えます。

Option Explicit

Dim stp As Boolean

Private Sub ListBox1_Change()
  Dim i As Long
  Dim x As Long
  Dim W As Variant
  
  If stp Then Exit Sub
  
  ReDim W(1 To ListBox1.ListCount)
  
  With ListBox1
    For i = 0 To .ListCount - 1
      If .Selected(i) Then
        x = x + 1
        W(x) = .List(i)
      End If
    Next
    
    If x = 0 Then Exit Sub
    
    ReDim Preserve W(1 To x)
    
    .TopLeftCell.Offset(, -1).Resize(x).Value = WorksheetFunction.Transpose(W)
    
  End With
  
End Sub

Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
  Dim i As Long
  Cancel = True
  stp = True
  With ListBox1
    .Top = Target.Top
    .Left = Target.Left + Target.Width
    For i = 0 To .ListCount - 1
      .Selected(i) = False
    Next
    .Visible = True
  End With
  stp = False
End Sub

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
  ListBox1.Visible = False
End Sub
・ツリー全体表示

【76891】Re:結合セルの参照元トレース
発言  β  - 15/4/3(金) 14:10 -

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

以下でお試しください。

Sub Sample()
  Dim r As Range
  Dim a As Range
  
  On Error Resume Next
  '数式の入ったセル群を取得
  Set r = Intersect(ActiveSheet.UsedRange.SpecialCells(xlCellTypeFormulas, 23), Columns("C"))
  On Error GoTo 0
  
  If r Is Nothing Then
    MsgBox "C列に数式の入ったセルはありません"
    Exit Sub
  End If
  
  For Each a In r.Areas
    If Left(a(1).Formula, 4) = "=IF(" Then a(1).ShowPrecedents
  Next
  
End Sub
・ツリー全体表示

【76890】リストボックスの作成について
質問  よぽん  - 15/4/3(金) 14:09 -

引用なし
パスワード
   Excel2010を使用しています。

ネットで探していろいろ試したのですが。
全くできませんでした。

いきなり○○の追加とかいわれてもどこにあるか全く分からず。
○○を作成するとか書かれていたりしてある程度のレベルが
ないととてもできない内容でした。

全くの初心者なので、文字入力以外のボタンなどもどこにあるか
わからない状態で申し訳ないのですが、
やりたいことは以下のようなことです。
よろしくお願いします。


セルをクリックして
┌────┐
│    │
│    │
└────┘

リストボックスが表示される
┌────┐
│    │┌────┐
│    ││List01 │
└────┘├────┤
      │List02 │
      ├────┤
      │List03 │
      ├────┤
      │List04 │
      └────┘

リストボックスの項目を複数選択する
┌────┐
│    │┌────┐
│    ││List01 │
└────┘┣━━━━┫
      ┃List02 ┃ ←┐
      ┣━━━━┫  ├これを選択
      ┃List03 ┃ ←┘
      ┣━━━━┫   
      │List04 │
      └────┘

リストボックスが消えて選択した項目がセルに表示される
┌────┐
│List02 │
│List03 │
└────┘
・ツリー全体表示

【76889】Re:結合セルの参照元トレース
発言  gg56  - 15/4/3(金) 14:08 -

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

>C列にある IF関数の参照元をトレースするコードですか?
はい、その意図で作成しました(参考コードですが)。

>その参照元は同じシート内と考えていいですか?
はい、別シートにはリンクしていません。
・ツリー全体表示

【76888】Re:結合セルの参照元トレース
発言  β  - 15/4/3(金) 14:01 -

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

こんにちは

単一セル(それが結合セルであっても)に対するFind って、??ですねぇ。
で、これは C列にある IF関数の参照元をトレースするコードですか?
その参照元は同じシート内と考えていいですか?
・ツリー全体表示

【76887】結合セルの参照元トレース
質問  gg56  - 15/4/3(金) 12:53 -

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

結合されたセルの参照元をトレースしたいのですが
ヒントをお教えくださいませんか?
使い方が間違っていると思いつつも、試しにMergeAreaとか加えてみましたがだめでした。


Sub 参照元トレース()
Dim i As Long, e As Long
Dim myData As Variant
Dim myKekka As Range

e = ActiveCell.SpecialCells(xlLastCell).Row

myData = "=if" 'if関数の入ったセルをトレース
For i = 1 To e
 Set myKekka = Cells(i, "C").MergeArea.Find(What:=myData, LookIn:=xlFormulas)
  If Not myKekka Is Nothing Then
   myKekka.ShowPrecedents
  End If
Next
End Sub
・ツリー全体表示

【76886】Re:VBAでピボットテーブルを自動化する方...
発言  マナ  - 15/4/3(金) 0:09 -

引用なし
パスワード
   最終的にどうしたいかがよくわかりません。
マクロ記録で無駄な操作まで記録されないように
事前に操作を練習しておくとよいです。

とりあえず、こちらで適当にマクロ記録とって
それを編集してみました。

Sub test()
  Dim pt As PivotTable
  Dim ws As Worksheet
  
  Set ws = ActiveWorkbook.Sheets("Book1")
  
  On Error Resume Next
  ws.Range(ws.PivotTables(1).TableRange2.Address).Delete
  On Error GoTo 0
  
  Set pt = ActiveWorkbook.PivotCaches.Create(xlDatabase, ws.Range("A1:E25")) _
      .CreatePivotTable(ws.Range("W3"))

  With pt
  
    With .PivotFields("都道府県")
      .Orientation = xlRowField
      .Position = 1
    End With
    With .PivotFields("性別")
      .Orientation = xlColumnField
      .Position = 1
    End With
    With .PivotFields("年齢")
      .Orientation = xlColumnField
      .Position = 2
    End With
    .AddDataField .PivotFields("氏名"), "データの個数 / 氏名", xlCount
    
  End With
  
End Sub
・ツリー全体表示

【76885】VBAでピボットテーブルを自動化する方法
質問  a  - 15/4/2(木) 13:51 -

引用なし
パスワード
   初めまして。
Excel VBAでピボットテーブルを自動化する方法を教えていただきたいです。
何故か一部しかピボットテーブルが表示されずに「オブジェクトが必要です」というエラーが出ました。
デバックをしたところ、下の方に矢印を入れた".Position=1"が黄色くなりました。
おそらくコードの間違いがあると思いますが、過去ログ等を見ても分からなかったので、
どのような間違いがあるのか分かる方はできれば教えていただきたいです。

Sub Macro2()
'
' Macro2 Macro
'

'
  ActiveWorkbook.PivotCaches.Create(SourceType:=xlDatabase, SourceData:= _
    "Book1!R1C1:R21C5", Version:=xlPivotTableVersion12).CreatePivotTable _
    TableDestination:="Book1!R23C8", TableName:="ピボットテーブル1", DefaultVersion _
    :=xlPivotTableVersion12
  Sheets("Book1").Select
  Cells(23, 8).Select
  ActiveWindow.ScrollColumn = 2
  ActiveWindow.ScrollColumn = 3
  ActiveWindow.ScrollRow = 2
  ActiveWindow.ScrollRow = 3
  ActiveWindow.ScrollRow = 4
  ActiveWindow.ScrollRow = 5
  ActiveWindow.ScrollRow = 6
  ActiveWindow.ScrollRow = 7
  ActiveWindow.ScrollRow = 8
  With ActiveSheet.PivotTables("ピボットテーブル1").PivotFields("氏名")
    .Orientation = xlPageField
    .Position = 1
  End With
  With ActiveSheet.PivotTables("ピボットテーブル1").PivotFields("氏名")
    .Orientation = xlRowField
    .Position = 1
  End With
  ActiveSheet.PivotTables("ピボットテーブル1").AddDataField ActiveSheet.PivotTables( _
    "ピボットテーブル1").PivotFields("性別"), "データの個数 / 性別", xlCount
  With ActiveSheet.PivotTables("ピボットテーブル1").PivotFields("都道府県")
    .Orientation = xlColumnField
    .Position = 1
  End With
  ActiveSheet.PivotTables("ピボットテーブル1").AddDataField ActiveSheet.PivotTables( _
    "ピボットテーブル1").PivotFields("都道府県"), "データの個数 / 都道府県", xlCount
  ActiveSheet.PivotTables("ピボットテーブル1").PivotFields("データの個数 / 都道府県"). _
    Orientation = xlHidden
  With ActiveSheet.PivotTables("ピボットテーブル1").PivotFields("年齢")
    .Orientation = xlColumnField
    .Position = 1
  End With
  ActiveSheet.PivotTables("ピボットテーブル1").AddDataField ActiveSheet.PivotTables( _
    "ピボットテーブル1").PivotFields("年齢"), "合計 / 年齢", xlSum
  ActiveSheet.PivotTables("ピボットテーブル1").PivotFields("合計 / 年齢").Orientation = _
    xlHidden
  ActiveWindow.ScrollRow = 9
  ActiveWindow.ScrollRow = 10
  ActiveWindow.ScrollRow = 11
  ActiveWindow.ScrollRow = 12
  ActiveWindow.ScrollRow = 13
  ActiveWindow.ScrollColumn = 4
  ActiveWindow.ScrollColumn = 5
  ActiveWindow.ScrollColumn = 6
  ActiveWindow.ScrollColumn = 7
  ActiveWindow.ScrollColumn = 6
  ActiveWindow.ScrollColumn = 5
  ActiveWindow.ScrollColumn = 4
  Range("I23").Select
  ActiveWindow.ScrollRow = 12
  ActiveWindow.ScrollRow = 11
  ActiveWindow.ScrollRow = 10
  ActiveWindow.ScrollRow = 9
  ActiveWindow.ScrollRow = 8
  ActiveWindow.ScrollRow = 7
  ActiveWindow.ScrollRow = 6
  ActiveWindow.ScrollRow = 5
  ActiveWindow.ScrollRow = 4
  ActiveWindow.ScrollColumn = 3
  ActiveWindow.ScrollColumn = 2
  ActiveWindow.ScrollColumn = 1
  ActiveWindow.ScrollColumn = 2
  ActiveWindow.ScrollColumn = 3
  ActiveWindow.ScrollColumn = 4
  ActiveWindow.ScrollColumn = 5
  ActiveWindow.ScrollColumn = 6
  ActiveWindow.ScrollRow = 5
  ActiveWindow.ScrollRow = 6
  ActiveWindow.ScrollRow = 7
  ActiveWindow.ScrollRow = 8
  ActiveWindow.ScrollRow = 9
  ActiveWindow.ScrollRow = 10
  ActiveWindow.ScrollRow = 11
  ActiveWindow.ScrollRow = 12
  ActiveWindow.ScrollRow = 13
  ActiveWindow.ScrollRow = 12
  ActiveWindow.ScrollRow = 11
  ActiveWindow.ScrollRow = 10
  ActiveWindow.ScrollRow = 9
  ActiveWindow.ScrollRow = 8
  ActiveWindow.ScrollRow = 7
  ActiveWindow.ScrollRow = 6
  ActiveWindow.ScrollRow = 5
  ActiveWindow.ScrollRow = 4
  ActiveWindow.ScrollColumn = 5
  ActiveWindow.ScrollColumn = 4
  ActiveWindow.ScrollColumn = 3
  ActiveWindow.ScrollColumn = 2
  ActiveWindow.ScrollColumn = 1
  ActiveWindow.ScrollColumn = 3
  ActiveWindow.ScrollColumn = 5
  ActiveWindow.ScrollColumn = 8
  ActiveWindow.ScrollColumn = 10
  ActiveWindow.ScrollColumn = 9
  ActiveWindow.ScrollColumn = 8
  ActiveWindow.ScrollColumn = 7
  ActiveWindow.ScrollColumn = 6
  ActiveWindow.ScrollColumn = 5
  ActiveWindow.ScrollRow = 5
  ActiveWindow.ScrollRow = 6
  ActiveWindow.ScrollRow = 7
  ActiveWindow.ScrollRow = 8
  ActiveWindow.ScrollRow = 9
  ActiveWindow.ScrollRow = 10
  ActiveWindow.ScrollRow = 11
  ActiveWindow.ScrollRow = 12
  With ActiveSheet.PivotTables("ピボットテーブル1").PivotFields("データの個数 / 性別")
    .Orientation = xlPageField
⇒    .Position = 1
  End With
  With ActiveSheet.PivotTables("ピボットテーブル1").PivotFields("性別")
    .Orientation = xlColumnField
    .Position = 1
  End With
  ActiveWindow.ScrollRow = 13
  ActiveSheet.PivotTables("ピボットテーブル1").AddDataField ActiveSheet.PivotTables( _
    "ピボットテーブル1").PivotFields("年齢"), "合計 / 年齢", xlSum
  With ActiveSheet.PivotTables("ピボットテーブル1").PivotFields("電話番号")
    .Orientation = xlPageField
    .Position = 1
  End With
  With ActiveSheet.PivotTables("ピボットテーブル1").PivotFields("都道府県")
    .Orientation = xlPageField
    .Position = 1
  End With
End Sub
・ツリー全体表示

【76884】Re:オートシェイプの色とパターンの設定
発言  カリーニン  - 15/4/1(水) 21:57 -

引用なし
パスワード
   2007でしか試してませんが、セルをコピーし図として貼り付け後、
図の変更でシェイプに変更しようとしてもシェイプに変更した時
点でパターンは消滅してしまいますね。残念。
・ツリー全体表示

【76883】Re:オートシェイプの色とパターンの設定
発言  マナ  - 15/4/1(水) 18:45 -

引用なし
パスワード
   文法としては

.Fill.Patterned Cells(I, 11).Interior.Pattern

みたいですが、

セルとオートシェイプで設定できるパターンが
そもそも違うようなので無意味と思います。

ht tp://www.happy2-island.com/excelsmile/smile03/capter01211.shtml
ht tp://www.happy2-island.com/excelsmile/smile03/capter00609.shtml
・ツリー全体表示

【76882】Re:いえ エラーでないです。
発言  γ  - 15/4/1(水) 6:56 -

引用なし
パスワード
   あまりにもナイーブすぎますね。
マルチポストの問題点をよく理解してください。
ht tp://ja.wikipedia.org/wiki/%E3%83%9E%E3%83%AB%E3%83%81%E3%83%9D%E3%82%B9%E3%83%88

そうした問題点もあり、ここでは条件付きでマルチを認めているのです。
> そして、仮に他のサイトで解決したのなら、ここにも必ずその顛末を書いてください。
> 質問しっぱなし、というのはモラルに反します。

これをきちんと守ってください。

金魚さん = nakahei21 さん?
発言を新たに建てる人は余り見ない。
もう少し、慎重に発言願いたい。
・ツリー全体表示

【76881】Re:オートシェイプの色とパターンの設定
発言  カリーニン  - 15/3/31(火) 20:12 -

引用なし
パスワード
   >2007以降ではなくなったようです。

↑のように書きましたが2010で復活したようです。
※当方2007ですので確認不足でした。
・ツリー全体表示

【76880】Re:オートシェイプの色とパターンの設定
発言  カリーニン  - 15/3/31(火) 20:04 -

引用なし
パスワード
   2002までは塗りつぶし効果でパターン設定できましたが2007以降ではなくなったようです。
代替の方法が↓で紹介されてます。
※VBAでの方法は未確認です。

ht tp://www.geocities.jp/oyakamassan_m/exceltips/excel2.html
・ツリー全体表示

【76879】オートシェイプの色とパターンの設定
質問  けい  - 15/3/31(火) 19:05 -

引用なし
パスワード
   VBA初心者です。
あるセルの色とパターンを取得し、それをオートシェイプに反映したいのですがうまくいきません。色までは出来たのですが、パターンが反映されないで困っております。

    With ActiveSheet.Shapes("棒" & I)
      .Left = 棒左上座標X: .Top = 棒左上座標Y
      .Width = 棒幅: .Height = 棒高
      .Fill.ForeColor.RGB = Cells(I, 11).Interior.Color
      Pattern = Cells(I, 11).Interior.Pattern
    End With

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

【76878】Re:Windows8のプログレスバーの使用につ...
発言  バウチャー  - 15/3/30(月) 13:55 -

引用なし
パスワード
   Win8.1
でも、
Officeは2010ではプログレスバーが使えるようです。


怪しいもののようで使用はしませんが一応報告です。
・ツリー全体表示

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