Excel VBA質問箱 IV

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

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


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

【77298】Re:Oracleデータを配列化(oo4o)
発言  ichinose  - 15/7/3(金) 18:16 -

引用なし
パスワード
   >どうやったら配列化できるでしょうか。
>そもそも配列化しないといけないわけじゃなくて、
0040は、私は使いませんが、結構ADOが似たような機能を有していますよね!!

ADOでは、 GetRowsメソッドで配列が取得できます。

0040でもあるみたいですよ!!

docs.oracle.com/cd/E11882_01/win.112/e17727/sermthod100.htm#OOFOL563
・ツリー全体表示

【77297】Oracleデータを配列化(oo4o)
質問  げんき  - 15/7/3(金) 17:26 -

引用なし
パスワード
   If ExcelDb(1,1) = OracleDb(1,1) then的に比較してマージしたい。


Private Sub Main()

Dim OraSession As Object
Dim db As Object
Dim rs As Object
Dim fld As Object
Dim recCount, i As Integer
Dim ExcelDb, OracleDb As Object

Dim strSQL
  
  strSQL = "SELECT * FROM TableName" 'SQL文
  
  Set OraSession = CreateObject("OracleInProcServer.XOraSession")   'oo4oオブジェクト生成
  Set db = OraSession.OpenDatabase("DNS", "UID/PWD", ORADB_DEFAULT) 'DB接続
  Set rs = db.CreateDynaset(strSQL, ORADYN_READONLY) 'SQL文実行
  Set fld = rs.Fields
  recCount = rs.RecordCount
  fldcount = fld.Count
  
  MsgBox recCount & "件のレコードを抽出しました"
  
  'レコード数分ループ
  While Not rs.EOF
    Debug.Print fld(2), fld(3)
    rs.MoveNext
    DoEvents
  Wend

'オブジェクト開放
Set fld = Nothing
Set rs = Nothing
Set db = Nothing
Set OraSession = Nothing

End Sub

どうやったら配列化できるでしょうか。
そもそも配列化しないといけないわけじゃなくて、
その方法しか思いついていないだけです。
良い方法があれば教えてください。
・ツリー全体表示

【77296】Re:保護、保護解除に時間がかかる
お礼  JIRORORO  - 15/7/2(木) 17:23 -

引用なし
パスワード
   ▼β さん:
▼独覚 さん:

ありがとうございます。そんなやり方があるんですね。問題解決できそうです。
・ツリー全体表示

【77295】Re:保護、保護解除に時間がかかる
発言  β  - 15/7/2(木) 15:37 -

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

ご紹介ありがとうございます。
そのほかにもいろいろあるんですね。勉強になりました。

であれば、なおさらのこと、ブックを開いたときの1回こっきりの保護の有効性が
増してきますね。
・ツリー全体表示

【77294】Re:保護、保護解除に時間がかかる
発言  独覚  - 15/7/2(木) 14:53 -

引用なし
パスワード
   ▼β さん:
Microsoftでの情報だけ。

ht tps://msdn.microsoft.com/ja-jp/library/office/ff837594.aspx

上記のページの「所要時間が長くなったシートの保護」を参照。

しっかりと
>これは設計によるものであり、回避策はありません。
となっているので仕様変更は望み薄…
・ツリー全体表示

【77293】Re:保護、保護解除に時間がかかる
発言  β  - 15/7/2(木) 14:43 -

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

>調べてみると原因のひとつに保護、保護解除を行うと時間がかかるようになっているとの記述を見つけました。
>その問題の解消されるような仕様変更はまだされていないのでしょうか?

そうなっているんですか。勉強になります。
ところで、マクロで書きこみなどをするために、保護解除->書き込み->再保護。
この行為に時間がかかるなら、これをやめればよろしいかと。

Workbook_Open に以下を記述しておきますと、そのブックの指定シートの保護設定条件を継承し
かつ、操作者からは保護でプロテクト、マクロは自由自在に書きこみなどができますので
都度、保護解除->書き込み->再保護 という処理そのものが不要になります。

コードではシートを特定していますが すべてのシート、あるいは、これとこれといった処理も
もちろん、(シートをループで取り出すことで)可能です。


Private Sub Workbook_Open()
'現在の保護要素を継承したシート保護 UserInterfaceOnly付
  Dim pp As Protection

  With Sheets("Sheet1")  '対象シート
    
    Set pp = .Protection
    
    .Protect DrawingObjects:=.ProtectDrawingObjects, _
          Contents:=.ProtectContents, _
          Scenarios:=.ProtectScenarios, _
          AllowFormattingCells:=pp.AllowFormattingCells, _
          AllowFormattingColumns:=pp.AllowFormattingColumns, _
          AllowFormattingRows:=pp.AllowFormattingRows, _
          AllowInsertingColumns:=pp.AllowInsertingColumns, _
          AllowInsertingRows:=pp.AllowInsertingRows, _
          AllowInsertingHyperlinks:=pp.AllowInsertingHyperlinks, _
          AllowDeletingColumns:=pp.AllowDeletingColumns, _
          AllowDeletingRows:=pp.AllowDeletingRows, _
          AllowSorting:=pp.AllowSorting, _
          AllowFiltering:=pp.AllowFiltering, _
          AllowUsingPivotTables:=pp.AllowUsingPivotTables, _
          UserInterfaceOnly:=True
  End With

End Sub
・ツリー全体表示

【77292】Re:二つの値を格納したい
お礼  imori  - 15/7/2(木) 14:17 -

引用なし
パスワード
   kanabunさん、
丁寧に教えていただきありがとうございます。

よく理解できました。
感謝いたします。ありがとうございました。
・ツリー全体表示

【77291】保護、保護解除に時間がかかる
質問  JIRORORO  - 15/7/2(木) 10:46 -

引用なし
パスワード
   多数の方が扱うブックなので、そのブックで使用しているマクロでもシートおよびブックの保護解除、保護を行う必要があります。

最近2013に変わったのですが、マクロがだいぶ遅くなりました。調べてみると原因のひとつに保護、保護解除を行うと時間がかかるようになっているとの記述を見つけました。

その問題の解消されるような仕様変更はまだされていないのでしょうか?
・ツリー全体表示

【77290】Re:二つの値を格納したい
発言  kanabun  - 15/7/1(水) 13:12 -

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

>以下のようにB列の値とC列の値を
>[あ、テスト1]のように一緒にもちたいです。
>また値を格納した後、それを取り出したいです。

何番目のデータかを指定して 2つの値を組で得たいときは、配列が便利です。

たとえば、以下では B:C列をひとつの配列に入れていますので、
その何行目何列目を指定すれば 値が得られます。

Sub tryA()
 Dim ary As Variant
 ary = Range("A1").CurrentRegion.Columns("B:C").Value
 
 MsgBox ary(5, 1) '→ 「お」が入っている
 MsgBox ary(6, 2) '→ 「テスト6」が入っている
End Sub

いっぽう、何番目の(何行目の)データか? ではなく、
たとえば B列の「お」に対応する C列のデータを取得したいときは、
Dictionaryオブジェクトを使うと 組データの格納ができます。

Sub tryB()
 Dim dic As Object
 Dim c As Range
 
 Set dic = CreateObject("Scripting.Dictionary")
 For Each c In Range("B1", Cells(Rows.Count, "B").End(xlUp))
   dic(c.Value) = c.Offset(, 1).Value
 Next
 MsgBox "キー「お」の値は " & dic("お") '→ 「テスト5」が返る
End Sub

C列データのほうを キーに登録して、 テスト番号を指定すると、対応するB列の
あ,い,う,え,... を返す風に組むこともできます。
・ツリー全体表示

【77289】二つの値を格納したい
質問  imori  - 15/7/1(水) 11:19 -

引用なし
パスワード
   お世話になっております。
マクロ初心者です。

以下のようにB列の値とC列の値を
[あ、テスト1]のように一緒にもちたいです。
また値を格納した後、それを取り出したいです。
A列B列に何の値が入っているかは分かりません。

Collectionや配列などで考えてみているのですが、
分かりません。
アドバイスいただけますでしょうか。
AB  C
1あ テスト1
2い テスト2
3う テスト3
4え テスト4
5お テスト5
6か テスト6

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

【77288】Re:WorkbookプロシージャとWorksheetプロ...
お礼  ぴょん  - 15/6/30(火) 23:45 -

引用なし
パスワード
   ▼β さん:
1.の方法でうまくいきました。
ご教授ありがとうございます。
・ツリー全体表示

【77287】Re:WorkbookプロシージャとWorksheetプロ...
発言  β  - 15/6/30(火) 22:54 -

引用なし
パスワード
   ▼ぴょん さん:
(Public変数は使えないようなので)

1.Workbookモジュールにモジュールレベル変数を【Public】で規定して
  シートモジュールでThisWorkbook.変数名 で参照

Option Explicit

Public arg As String

Private Sub Workbook_Open()
  arg = "Hello"
End Sub

Option Explicit

Private Sub OptionButton1_Click()
  MsgBox ThisWorkbook.arg
End Sub

2.標準モジュールでPublic変数を規定してThisWorkbookモジュールで設定、
  シートモジュールでふつうに参照。
・ツリー全体表示

【77286】WorkbookプロシージャとWorksheetプロシ...
質問  ぴょん  - 15/6/30(火) 22:30 -

引用なし
パスワード
   Workbookプロシージャ(Workbook_Open)で算出した値を、Worksheetプロシージャに引き渡すにはどのようにしたらよいのでしょうか?(Public変数は使えないようなので)

■Workbookプロシージャ

 Private Sub Workbook_Open()
  ここで設定
 End Sub

■Worksheetプロシージャ

 Private Sub ラジオボタン1_Click()
  ここで参照
 End Sub

 Private Sub ラジオボタン2_Click()
  ここでも参照
 End Sub
・ツリー全体表示

【77285】Re:ラジオボタン
お礼  ぴょん  - 15/6/30(火) 21:51 -

引用なし
パスワード
   ▼β さん:
なるほど、そういう手もあるんですね。
ちょっと考え方が”クリックしたら”で固まってました。
changeしたらでもいいんですね〜、勉強になります。
ありがとうございました。
・ツリー全体表示

【77284】Re:ラジオボタン
発言  β  - 15/6/30(火) 8:47 -

引用なし
パスワード
   ▼ぴょん さん:
>”あ”を押下したときは、 「A」「B」をEnabled = Trueにします。
>”い”を押下したときは、 「A」「B」をEnabled = Falseにします。

ClickイベントではなくChangeイベントを使えば、以下だけでOKです。
ご参考まで。
あ、い が OptionButton1,2。A,B が OptionButtonA,B としています。

Private Sub OptionButton1_Change()
  OptionButtonA.Enabled = OptionButton1.Value
  OptionButtonB.Enabled = OptionButton1.Value
End Sub
・ツリー全体表示

【77283】Re:ラジオボタン
お礼  マナ  - 15/6/29(月) 21:23 -

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

失礼しました。ちょっとおせっかいが過ぎたようです。
・ツリー全体表示

【77282】Re:ラジオボタン
回答  ぴょん  - 15/6/29(月) 20:29 -

引用なし
パスワード
   ▼独覚 さん:
>▼ぴょん さん:
>
>1.「あ」をチェックすると「A」「B」をチェック可能。
> 「い」をチェックすると「A」「B」をチェック不可能。
> (「A」「B」がチェックされている場合はチェックを解除)
>
>2.「あ」「い」どちらをチェックしても「A」「B」をチェック可能。
> ただし、「A」「B」にチェックをすると強制的に「あ」にチェックが入り、「い」は未チェック状態になる。
>
>どちらを望んでいるのでしょうか?
”あ”を押下したときは、 「A」「B」をEnabled = Trueにします。
”い”を押下したときは、 「A」「B」をEnabled = Falseにします。
・ツリー全体表示

【77281】Re:ラジオボタン
回答  ぴょん  - 15/6/29(月) 20:26 -

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

返事が遅くなりました。
”い”を押下されたときは、A,BはEnabled = Falseにしてます
・ツリー全体表示

【77280】Re:ラジオボタン
発言  独覚  - 15/6/29(月) 14:18 -

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

1.「あ」をチェックすると「A」「B」をチェック可能。
 「い」をチェックすると「A」「B」をチェック不可能。
 (「A」「B」がチェックされている場合はチェックを解除)

2.「あ」「い」どちらをチェックしても「A」「B」をチェック可能。
 ただし、「A」「B」にチェックをすると強制的に「あ」にチェックが入り、「い」は未チェック状態になる。

どちらを望んでいるのでしょうか?
・ツリー全体表示

【77278】Re:ラジオボタン
発言  マナ  - 15/6/28(日) 22:23 -

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

βさんのコメントをよく読んで下さい。
完全解決とは言えないと思いますよ。
もう一工夫がないと、別の問題が発生しているはずです。
・ツリー全体表示

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