Excel VBA質問箱 IV

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

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


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

【76429】Re:VBAについて
お礼  ゆっきーな  - 14/11/28(金) 13:47 -

引用なし
パスワード
   ▼ゆっきーな さん:
>▼通りすがり さん:
>>▼ゆっきーな さん:
>>
>> 過去に↓のような回答もありました。
>>
>>Sub Test() '図の存在チェック
>> If IsObject(Evaluate("図1")) Then
>>  MsgBox "存在します"
>> Else
>>  MsgBox "存在しません"
>> End If
>> End Sub
>>
>>オリジナル出展はk窓 E00M079
>>h tp://www2.aqua-r.tepm.jp/~kmado/ke_m8.htm
>
>
>回答ありがとうございます。
>いくつか投稿を頂いているので、全て試したいと思います。
>またご連絡致しますので、宜しくお願い致します。


全て検証を終えました。
上記の内容でも私は問題がありませんでしたが、カリーニン様の
内容にて今回は運用しようと思います。
ご回答本当にありがとうございました。
・ツリー全体表示

【76428】Re:VBAについて
お礼  ゆっきーな  - 14/11/28(金) 13:46 -

引用なし
パスワード
   ▼ゆっきーな さん:
>▼ichinose さん:
>>▼カリーニン さん:
>>>逆に、私は最初、シェイプを選択したら名前ボックスにシェイプの名前が出る
>>>ので、そこで判定できるかも、と考えたのですが、定義した名前の一覧に
>>>シェイプの名前が出てこなかったので使えませんでした。
>>これは、Shapesコレクションをグルグル回す(For Each等で)と、
>>既定名(名前ボックスの名)では、検索できない という意味ですよね?
>>
>>既定名で運用すると、二つの名前を持ってしまいますからねえ!!
>>
>>Excelを起動した直後に 新規ブックの標準モジュールに
>>
>>Option Explicit
>>Sub test()
>>  Dim rect As Object
>>  With ActiveSheet
>>    Set rect = .Rectangles.Add(50, 50, 50, 50)
>>    MsgBox .Shapes("正方形/長方形 1").Name
>>    Debug.Print .Shapes("正方形/長方形 1").Name
>>    rect.Name = "ichinose"
>>    MsgBox .Shapes(rect.Name).Name
>>    MsgBox .Shapes("正方形/長方形 1").Name
>>    MsgBox .Shapes("Rectangle 1").Name
>>  End With
>>  Set rect = Nothing
>>End Sub
>>
>>
>>上記のコードを実行してみると、わかるように
>>新規に作成した四角形には 正方形/長方形 1 なんて名前が命名されます。
>>これのVBAで参照可能な既定名は Rectangle 1 になります。
>>
>>この四角形の名前を ichinose に代えた後も
>>正方形/長方形 1 や Rectangle 1 という既定名でもオブジェクトを取得できてしまいます。
>>
>>この辺りの事を考慮すると、仕様をどのようにするのか ということも結構重要になってきますね
>
>
>回答ありがとございます。
>いくつか投稿を頂いているので、全て試したいと思います!
>またご連絡致しますので、宜しくお願い致します。


早速試してみました。
カリーニン様のご投稿頂いた内容で、無事に動きました。
”図1”ですと、ありきたりだと思うので、
”人数情報”という名前を指定する事に致しました。
今のところは動いておりますが、画像を沢山挿入したりして検証したいと
思います!
ご回答誠に有難うございます!
・ツリー全体表示

【76427】Re:VBAについて
お礼  ゆっきーな  - 14/11/28(金) 13:40 -

引用なし
パスワード
   ▼ゆっきーな さん:
>▼カリーニン さん:
>>エラー番号で判定するサンプルです。
>>
>>Sub test()
>> Dim spnm As String
>> Dim dumyflg As Boolean
>> Dim spexists As Boolean
>> spnm = "aa"
>> On Error Resume Next
>> Err.Clear
>> dumyflg = IsObject(ActiveSheet.Shapes(spnm))
>> If Err.Number = 0 Then
>>   MsgBox spnm & vbCrLf & "有る"
>> Else
>>   MsgBox spnm & vbCrLf & "無い"
>> End If
>> On Error GoTo 0
>>End Sub
>
>
>回答ありがとうございます。
>いくつか投稿を頂いているので、全て試したいと思います。
>シェイプの名前”図1”はあくまで例です。
>実際には、任意の名前をシェイプに付けます。
>そうすれば、他の方が画像やシェイプを挿入された時でも
>エラーが出ないと思われますので!
>検証終わりましたら、再度ご連絡致します!


早速試してみました!
無事エラーも出ず、私の思うように動いております!
本当に助かりました!!
ちなみにシェイプの名前は”人数情報”というのに指定してみました。
他にも画像を入れたりしてチェックしてみます!
本当に感謝致します。
・ツリー全体表示

【76426】Re:VBAについて
発言  ゆっきーな  - 14/11/28(金) 13:13 -

引用なし
パスワード
   ▼ichinose さん:
>▼カリーニン さん:
>>逆に、私は最初、シェイプを選択したら名前ボックスにシェイプの名前が出る
>>ので、そこで判定できるかも、と考えたのですが、定義した名前の一覧に
>>シェイプの名前が出てこなかったので使えませんでした。
>これは、Shapesコレクションをグルグル回す(For Each等で)と、
>既定名(名前ボックスの名)では、検索できない という意味ですよね?
>
>既定名で運用すると、二つの名前を持ってしまいますからねえ!!
>
>Excelを起動した直後に 新規ブックの標準モジュールに
>
>Option Explicit
>Sub test()
>  Dim rect As Object
>  With ActiveSheet
>    Set rect = .Rectangles.Add(50, 50, 50, 50)
>    MsgBox .Shapes("正方形/長方形 1").Name
>    Debug.Print .Shapes("正方形/長方形 1").Name
>    rect.Name = "ichinose"
>    MsgBox .Shapes(rect.Name).Name
>    MsgBox .Shapes("正方形/長方形 1").Name
>    MsgBox .Shapes("Rectangle 1").Name
>  End With
>  Set rect = Nothing
>End Sub
>
>
>上記のコードを実行してみると、わかるように
>新規に作成した四角形には 正方形/長方形 1 なんて名前が命名されます。
>これのVBAで参照可能な既定名は Rectangle 1 になります。
>
>この四角形の名前を ichinose に代えた後も
>正方形/長方形 1 や Rectangle 1 という既定名でもオブジェクトを取得できてしまいます。
>
>この辺りの事を考慮すると、仕様をどのようにするのか ということも結構重要になってきますね


回答ありがとございます。
いくつか投稿を頂いているので、全て試したいと思います!
またご連絡致しますので、宜しくお願い致します。
・ツリー全体表示

【76425】Re:VBAについて
発言  ゆっきーな  - 14/11/28(金) 13:12 -

引用なし
パスワード
   ▼通りすがり さん:
>▼ゆっきーな さん:
>
> 過去に↓のような回答もありました。
>
>Sub Test() '図の存在チェック
> If IsObject(Evaluate("図1")) Then
>  MsgBox "存在します"
> Else
>  MsgBox "存在しません"
> End If
> End Sub
>
>オリジナル出展はk窓 E00M079
>h tp://www2.aqua-r.tepm.jp/~kmado/ke_m8.htm


回答ありがとうございます。
いくつか投稿を頂いているので、全て試したいと思います。
またご連絡致しますので、宜しくお願い致します。
・ツリー全体表示

【76424】Re:VBAについて
発言  ゆっきーな  - 14/11/28(金) 13:09 -

引用なし
パスワード
   ▼カリーニン さん:
>エラー番号で判定するサンプルです。
>
>Sub test()
> Dim spnm As String
> Dim dumyflg As Boolean
> Dim spexists As Boolean
> spnm = "aa"
> On Error Resume Next
> Err.Clear
> dumyflg = IsObject(ActiveSheet.Shapes(spnm))
> If Err.Number = 0 Then
>   MsgBox spnm & vbCrLf & "有る"
> Else
>   MsgBox spnm & vbCrLf & "無い"
> End If
> On Error GoTo 0
>End Sub


回答ありがとうございます。
いくつか投稿を頂いているので、全て試したいと思います。
シェイプの名前”図1”はあくまで例です。
実際には、任意の名前をシェイプに付けます。
そうすれば、他の方が画像やシェイプを挿入された時でも
エラーが出ないと思われますので!
検証終わりましたら、再度ご連絡致します!
・ツリー全体表示

【76423】Re:VBAについて
発言  ichinose  - 14/11/28(金) 12:56 -

引用なし
パスワード
   ▼カリーニン さん:
>逆に、私は最初、シェイプを選択したら名前ボックスにシェイプの名前が出る
>ので、そこで判定できるかも、と考えたのですが、定義した名前の一覧に
>シェイプの名前が出てこなかったので使えませんでした。
これは、Shapesコレクションをグルグル回す(For Each等で)と、
既定名(名前ボックスの名)では、検索できない という意味ですよね?

既定名で運用すると、二つの名前を持ってしまいますからねえ!!

Excelを起動した直後に 新規ブックの標準モジュールに

Option Explicit
Sub test()
  Dim rect As Object
  With ActiveSheet
    Set rect = .Rectangles.Add(50, 50, 50, 50)
    MsgBox .Shapes("正方形/長方形 1").Name
    Debug.Print .Shapes("正方形/長方形 1").Name
    rect.Name = "ichinose"
    MsgBox .Shapes(rect.Name).Name
    MsgBox .Shapes("正方形/長方形 1").Name
    MsgBox .Shapes("Rectangle 1").Name
  End With
  Set rect = Nothing
End Sub


上記のコードを実行してみると、わかるように
新規に作成した四角形には 正方形/長方形 1 なんて名前が命名されます。
これのVBAで参照可能な既定名は Rectangle 1 になります。

この四角形の名前を ichinose に代えた後も
正方形/長方形 1 や Rectangle 1 という既定名でもオブジェクトを取得できてしまいます。

この辺りの事を考慮すると、仕様をどのようにするのか ということも結構重要になってきますね
・ツリー全体表示

【76422】Re:値のコピペ
発言  kanabun  - 14/11/28(金) 10:45 -

引用なし
パスワード
   ▼こずえ さん:

>Valueプロパティ一覧はありますか?(例え:何をする時は???とか)

質問が判りません... が、あてずっぽで...

Rangeオブジェクトの Valueプロパティは セル(範囲)に入っている値を取得または
セットするプロパティです。
他には .Value2 プロパティというのがあります。.Valueプロパティとほとんどの
ばあい同じですが、セルに日付が入っているとき、.Valueプロパティは 日付を返し
ますが、.Value2プロパティは 数値(シリアル値)を返します。
また、Rangeオブジェクトには .Textプロパティもあります。これはセルに表示されて
いるテキストを返すプロパティで、
たとえば、
セルに 2014/11/28 という日付けがセットされているときには、
 .Valueプロパティ は 2014/11/28 (数式バーに表示されている値)
 .Value2プロパティ は 41971   (シリアル値)
 .Textプロパティ は 「11月28日」 (セルの表示形式で変化)
が返ります。
セル内の数値が桁あふれで ###### のようになっているときは .Textプロパティは
表示されている通りの文字列 "######" を返します。


>ちなみに、("B7")と("C4")かどちらかが入力がされてないと
>【住所または社名が入力されてません】とメッセージを出したいんですが
>何プロパティし調べればいいのですか?
セルが未入力かどうかは IsEmpty()関数で調べられます。
ただし、[B7]と[C4]と、対象セルが複数なので、少し工夫して

  If WorksheetFunction.CountA(Range("B7,C4")) < 2 Then
    MsgBox "【住所または社名が入力されてません】"
  End If

のように一括で調べてもいいです。
・ツリー全体表示

【76421】Re:値のコピペ
質問  こずえ  - 14/11/28(金) 10:38 -

引用なし
パスワード
   kanabunさん
モジュールは正常に動きました。
有難うございます。
Valueプロパティ一覧はありますか?(例え:何をする時は???とか)

ちなみに1、("B7")と("C4")かどちらかが入力がされてないと
     【住所または社名が入力されてません】とメッセージを出したいんです
ちなみに2、 ("B7")と("C4")かどちらも入力がされてた場合
     【住所、社名はセットされました。】とメッセージを出したいんです    
      何プロパティし調べればいいのですか?
>
>「値をコピー」するのに .Valueプロパティを利用する方法です。
>
>Sub try1b()
> Dim i As Long
> Dim v As Variant
> 
> With Sheets("メニュー")
>   .Range("B7").Value = .Range("C4").Value
>   v = .Range("C3:C4").Value
> End With
> With Sheets("Sheet2")
>   For i = 10 To 163 Step 51
>     .Cells(i, "C").Resize(2).Value = v
>   Next
>   For i = 216 To 303 Step 29
>     .Cells(i, "C").Resize(2).Value = v
>   Next
> End With
>   
>End Sub
・ツリー全体表示

【76420】Re:VBAについて
発言  カリーニン  - 14/11/28(金) 9:35 -

引用なし
パスワード
   逆に、私は最初、シェイプを選択したら名前ボックスにシェイプの名前が出る
ので、そこで判定できるかも、と考えたのですが、定義した名前の一覧に
シェイプの名前が出てこなかったので使えませんでした。
・ツリー全体表示

【76419】Re:VBAについて
発言  ichinose  - 14/11/28(金) 8:50 -

引用なし
パスワード
   追伸

私の投稿の趣旨は、

On Error Resume Nextは、使い方次第で様々な個所で利用できるという事です。
あまり使わない方がよいという投稿をたまに目にしますが、
正しい(うまい)使い方を研究することだと思います。

使い方を間違えると、バグが発見できなかったりしますが、
うまく使えば、強力なステートメントですよね!!
・ツリー全体表示

【76418】Re:VBAについて
発言  ichinose  - 14/11/28(金) 8:39 -

引用なし
パスワード
   Sub test1()
  Dim shp As Shape
  Const nf = -2147024809
  On Error Resume Next
  Set shp = ActiveSheet.Shapes("図1")
  If Err.Number = 0 Then
    MsgBox "存在します"
  ElseIf Err.Number = nf Then
    MsgBox "指定のシェイプは、ありません"
  Else
    MsgBox "その他のエラー" & Err.Description
  End If
  On Error GoTo 0
End Sub

エラートラップを拾うカリーニンさんの最初の投稿が
良いと思いますけどねえ・・・。


コレクションをぐるぐる回す方法は、シート内の貼り付ける図形の数なんて
たかが知れていますから、大したことはないですけど、図形名の順次検索ですよね?

Shapes("図1") とすれば、たぶん、ハッシュ法を採用しているはずですから、
検索は速いと思ますよ!!
そうでなければ、コレクションにする意味がないですよね


因みに
通りすがりさんの投稿の場合、

>if IsObject(Evaluate("図1")) Then

セルに図1 という名前を付けても反応してしまいますけどねえ
・ツリー全体表示

【76417】Re:VBAについて
発言  通りすがり  - 14/11/28(金) 4:27 -

引用なし
パスワード
   ▼ゆっきーな さん:

過去に↓のような回答もありました。

Sub Test() '図の存在チェック
 If IsObject(Evaluate("図1")) Then
  MsgBox "存在します"
 Else
  MsgBox "存在しません"
 End If
End Sub

オリジナル出展はk窓 E00M079
h tp://www2.aqua-r.tepm.jp/~kmado/ke_m8.htm
・ツリー全体表示

【76416】Re:VBAについて
発言  カリーニン  - 14/11/27(木) 23:13 -

引用なし
パスワード
   まじめに指定のシェイプが存在するか否かを判定する方法です。

VBAで特定のワークブック/ワークシート/オートシェイプ(図形)が存在するかチェックする
ht tp://d.hatena.ne.jp/sumihira1989/20140626/1403786010
・ツリー全体表示

【76415】Re:値のコピペ
発言  kanabun  - 14/11/27(木) 22:50 -

引用なし
パスワード
   ▼こずえ さん:

「値をコピー」するのに .Valueプロパティを利用する方法です。

Sub try1b()
 Dim i As Long
 Dim v As Variant
 
 With Sheets("メニュー")
   .Range("B7").Value = .Range("C4").Value
   v = .Range("C3:C4").Value
 End With
 With Sheets("Sheet2")
   For i = 10 To 163 Step 51
     .Cells(i, "C").Resize(2).Value = v
   Next
   For i = 216 To 303 Step 29
     .Cells(i, "C").Resize(2).Value = v
   Next
 End With
   
End Sub
・ツリー全体表示

【76414】Re:VBAについて
発言  カリーニン  - 14/11/27(木) 20:51 -

引用なし
パスワード
   ↑の

Dim spexists As Boolean

は不要でした。
・ツリー全体表示

【76413】Re:VBAについて
発言  カリーニン  - 14/11/27(木) 20:32 -

引用なし
パスワード
   エラー番号で判定するサンプルです。

Sub test()
Dim spnm As String
Dim dumyflg As Boolean
Dim spexists As Boolean
 spnm = "aa"
 On Error Resume Next
 Err.Clear
 dumyflg = IsObject(ActiveSheet.Shapes(spnm))
 If Err.Number = 0 Then
   MsgBox spnm & vbCrLf & "有る"
 Else
   MsgBox spnm & vbCrLf & "無い"
 End If
 On Error GoTo 0
End Sub
・ツリー全体表示

【76412】VBAについて
質問  ゆっきーな  - 14/11/27(木) 18:03 -

引用なし
パスワード
   シート上に”図1”というシェイプが存在する場合は、
メッセージで”あります”、無い場合は”無いです”を表示させたいのですが、
色々と試行錯誤してやってはみてるのですが、勉強不足で・・・
ご親切な方、教えて頂けないでしょうか。

excelは2013です。
元々シェイプカウントでIfを作っていたのですが、画像を追加してしまうと
対応出来ない為、シェイプの名前を指定した方が早いのではと思いました。

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

【76410】値のコピペ
質問  こずえ  - 14/11/27(木) 13:27 -

引用なし
パスワード
   Sheet[メニュー]C3:F3(セルの結合)に住所を入力されるようになっています。
ボタンを押したら、【Sheets("Sheet2")の8箇所】に値の貼り付け。

Sheet[メニュー]C4:F4(セルの結合)に社名を入力されるようになっています。
ボタンを押したら、【Sheets"メニュー"の1箇所に値の貼り付け】、【Sheets("Sheet2")の8箇所に値の貼り付け】を
するモジュールです。もっと短く出来たらと思ってこの掲示板に書き込みました。
宜しくお願い致します。


Sub CA()

'住所コピー
Sheets("メニュー").Range("C3").Copy 'メニュー,C3:F3(セルの結合)コピー
Sheets("Sheet2").Range("C10").PasteSpecial Paste:=xlPasteValues
'Sheet2,C10:H10(セルの結合)値の貼り付け
Sheets("Sheet2").Range("C61").PasteSpecial Paste:=xlPasteValues
'Sheet2,C61:H61(セルの結合)値の貼り付け
Sheets("Sheet2").Range("C112").PasteSpecial Paste:=xlPasteValues
'Sheet2,C112:H112(セルの結合)値の貼り付け
Sheets("Sheet2").Range("C163").PasteSpecial Paste:=xlPasteValues
'Sheet2,C163:H163(セルの結合)値の貼り付け
Sheets("Sheet2").Range("C216").PasteSpecial Paste:=xlPasteValues
'Sheet2,C216:H216(セルの結合)値の貼り付け
Sheets("Sheet2").Range("C245").PasteSpecial Paste:=xlPasteValues
'Sheet2,C245:H245(セルの結合)値の貼り付け
Sheets("Sheet2").Range("C274").PasteSpecial Paste:=xlPasteValues
'Sheet2,C274:H163(セルの結合)値の貼り付け
Sheets("Sheet2").Range("C303").PasteSpecial Paste:=xlPasteValues
'Sheet2,C303:H303(セルの結合)値の貼り付け
Sheets("メニュー").Range("A1").Select

'社名
Sheets("メニュー").Range("C4").Copy 'メニュー,C4:F4(セルの結合)コピー
Sheets("メニュー").Range("B7").PasteSpecial Paste:=xlPasteValues 'メニュー,B7:J7(セルの結合)値の貼り付け
Sheets("Sheet2").Range("C11").PasteSpecial Paste:=xlPasteValues
'Sheet2,C11:H11(セルの結合)値の貼り付け
Sheets("Sheet2").Range("C62").PasteSpecial Paste:=xlPasteValues
'Sheet2,C62:H62(セルの結合)値の貼り付け
Sheets("Sheet2").Range("C113").PasteSpecial Paste:=xlPasteValues
'Sheet2,C113:H113(セルの結合)値の貼り付け
Sheets("Sheet2").Range("C164").PasteSpecial Paste:=xlPasteValues
'Sheet2,C164:H164(セルの結合)値の貼り付け
Sheets("Sheet2").Range("C217").PasteSpecial Paste:=xlPasteValues
'Sheet2,C217:H217(セルの結合)値の貼り付け
Sheets("Sheet2").Range("C246").PasteSpecial Paste:=xlPasteValues
'Sheet2,C246:H246(セルの結合)値の貼り付け
Sheets("Sheet2").Range("C275").PasteSpecial Paste:=xlPasteValues
'Sheet2,C275:H275(セルの結合)値の貼り付け
Sheets("Sheet2").Range("C304").PasteSpecial Paste:=xlPasteValues
'Sheet2,C304:H304(セルの結合)値の貼り付け

End Sub
・ツリー全体表示

【76409】Re:不明ファイル
お礼  なにこれ  - 14/11/27(木) 11:20 -

引用なし
パスワード
   ▼kanabun さん:
 返事遅くなりました。
  ありがとうございます。


>▼なにこれ さん:
>>ファイルを処理した後にたまに同じファイル名に
>>
>>~$
>>
>>が頭についたファイルが勝手に生成されているときがあります。
>>
>>これって何?
>
>他の掲示板でも質問があるようです。
>ht tps://social.technet.microsoft.com/Forums/windows/ja-JP/01c78d86-9e99-4409-b828-8f8dd3f5b94f?forum=w7itprogeneralja
・ツリー全体表示

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