Excel VBA質問箱 IV

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

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


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

【76208】Re:開いた時の状態に戻すボタンを作成し...
発言  γ  - 14/10/15(水) 22:16 -

引用なし
パスワード
   テンプレート案に賛成ですが、どうしてもというなら、
こんな方法もあるでしょう。
testをボタンに登録しておきます。

Sub test()
  Application.OnTime Now + TimeValue("00:00:01"), "my_Procedure"
  ActiveWorkbook.Close False
End Sub

Sub my_Procedure()
  Dim s As String
  s = "ファイルのパス名をここに書く"
  Workbooks.Open s
End Sub
・ツリー全体表示

【76207】excel2013 SDI
質問  help  - 14/10/15(水) 12:28 -

引用なし
パスワード
   2013に変わってからSDIになり困っています。

最悪なことに

A.xlsmにuserform

B.顧客から.xlsx

今までは、BをAへコピーして必要な部分だけを加工していました。
SDIになりかなり困っています。

personal.xlsb
個人マクロを使用すればどのbookからも必要なuserformを使用できますか?

試してみたら3回に一回はpersonal.xlsbが消えているのですが。

*アドイン化した事ないのですが
このような場合どういう方法をとるのがいいのでしょうか?

助けてください。
・ツリー全体表示

【76206】Re:開いた時の状態に戻すボタンを作成し...
発言  カリーニン  - 14/10/14(火) 20:43 -

引用なし
パスワード
   テンプレート用のブックを用意しておき、テンプレートブックをコピーして使うようにすれば
いいとおもいます。
・ツリー全体表示

【76205】開いた時の状態に戻すボタンを作成したい
質問  hamako  - 14/10/14(火) 12:44 -

引用なし
パスワード
   伝票作成画面をエクセルで作成しています。

ランダムのセルに
関数や計算式等が入っており、関数を利用する場合もあれば、
関数や計算式を消して直接入力する事もあります。

現在は伝票作成するたびに
上書きせずに閉じ、開きなおして次の伝票を作成しています。
この手間をはぶく為に「初期に戻す」などといったマクロボタン
を作成したいのですが
どのようにしたらいいかわかりません・・m(__)m

「入力したセルの値を全てクリア」でよければ解決なのですが、
関数を利用する場合もあれば、関数を消して直接入力してしまう場合も
ある為、このような事はできるのでしょうか??
大変お手数ですがよろしくお願いします。
・ツリー全体表示

【76204】Re:タブレット端末で実行できるようにし...
発言  γ  - 14/10/13(月) 19:08 -

引用なし
パスワード
   コードの問題じゃなく、タブレット端末の使い方の問題だと思います。

>タブレットでは、(タブレットではないPCの)ダブルクリックなどに
>相当する操作がきちんとできているのか、
と尋ねているのにそれに関する返答もなく、自分の要求を繰り返すだけなら、
時間の無駄です。

ここは、ExcelVBAに関する質問をするところなので、
他の方からコメントありませんでしたし、
どうしても自分で調べる気がしないなら、
別のところで質問したほうが良いですね。
・ツリー全体表示

【76203】Re:フォルダー内のエクセルのシート名を...
お礼  ペンネーム船長  - 14/10/13(月) 18:50 -

引用なし
パスワード
   γさん kanabunさん 
ご教授有難う御座いました。
ここでのアドバイスを生かして【76193】の質問を解決しました。
今回も色々な事を教えていただきまして、感謝しています。
・ツリー全体表示

【76202】Re:シート名の先頭が変化するシートを特...
お礼  ペンネーム船長  - 14/10/13(月) 18:43 -

引用なし
パスワード
   γさん  kanabunさん 
アドバイス有難う御座いました。
みなさんのコードを使わせて頂いて下記のようなコードに変更したら、上手くゆきました。
ExecuteExcel4Macro は無闇に使わない方が良いという記事は参考になりました。
これからも宜しくお願いします。

Private Sub CommandButton1_Click()
On Error Resume Next 'エラーを無視する
  Dim buf As String
  Dim wb As Workbook
  Dim sh As Worksheet
  Dim sh2 As Worksheet
        
  Set sh2 = Worksheets("調査結果")
  Const path = "C:\Users\○●\Desktop\test\"
        
  buf = Dir(path & "*.xls")
        
  Do While buf <> ""
    Set wb = Workbooks.Open(path & buf)
    MsgBox "これからチェックするブックは『" & buf & "』です"
    For Each sh In Worksheets
      MsgBox "チェックするシートは『" & sh.Name & "』です"
      
      If sh.Name Like "*あいうえお*" Then
       Set obj = sh.Range("G:G").Find(what:="2-")
       MsgBox "objの内容は『" & obj & "』です"
 
         If obj Is Nothing Then
          MsgBox "『2-』が無いブック名は『" & buf & "』です"
          sh2.Cells(Rows.Count, 2).End(xlUp).Offset(1, 0) = buf
         End If
       Else
         MsgBox "このシートは調査対象ではありません"
      End If
      
    Next sh
    wb.Close False
    buf = Dir()
  Loop
End Sub
・ツリー全体表示

【76201】Re:タブレット端末で実行できるようにし...
発言  おかわりくん  - 14/10/13(月) 18:27 -

引用なし
パスワード
   ▼γ さん:
ご回答ありがとうございます。
他の端末で動作確認はできました。が、やはりタブレット端末だけ動作が確認出来ません。
改善点をこうすれば、という記述をご面倒お掛けいたしますが、お願いできないでしょうか?
・ツリー全体表示

【76200】Re:フォルダー内のエクセルのシート名を...
発言  kanabun  - 14/10/13(月) 14:27 -

引用なし
パスワード
   しかも、根本的に 構文を間違えてるし (汗!!)

以下、おおまちがい

>   Workbooks(buf).Open

>   Workbooks(Bookのパス).Open
>が構文ですから、

>   Workbooks(path & buf).Open
>

反面教師の巻でした m(_ _)m
・ツリー全体表示

【76199】Re:フォルダー内のエクセルのシート名を...
発言  kanabun  - 14/10/13(月) 14:18 -

引用なし
パスワード
   すみません。
画面を更新せず、発言してしまいました m(_ _)m
・ツリー全体表示

【76198】Re:フォルダー内のエクセルのシート名を...
発言  kanabun  - 14/10/13(月) 14:17 -

引用なし
パスワード
   ▼ペンネーム船長 さん:

>Const path = "C:\Users\○●\Desktop\test\"
>
>buf = Dir(path & "*.xls")
>
>Do While buf <> ""
>  Workbooks(" & buf & ").Open

最後の構文は
   Workbooks(buf).Open

>  Workbooks(" & buf & ").Open
では、
  「 & buf & 」 という名前のブックをOpenという命令になっています。

それと
   Workbooks(Bookのパス).Open
が構文ですから、

>buf = Dir(path & "*.xls")

では bufのなかに たとえば "あいうえ.xls" のように正味のBook名しか
入っていません。

   Workbooks(path & buf).Open

のようにパス付でBook名を指定してください。
・ツリー全体表示

【76197】Re:フォルダー内のエクセルのシート名を...
発言  γ  - 14/10/13(月) 14:10 -

引用なし
パスワード
   こんにちは。
対比してみてください。

Private Sub CommandButton1_Click()
  Dim buf As String
  Dim wb As Workbook
  Dim sh As Worksheet

  Const path = "C:\Users\○●\Desktop\test\"

  buf = Dir(path & "*.xls")

  Do While buf <> ""
    Set wb = Workbooks.Open(path & buf)
    MsgBox "ブック名は『" & buf & "』です"
    For Each sh In wb.Worksheets
      MsgBox "シート名は『" & sh.Name & "』です"
    Next sh
    wb.Close False
    buf = Dir()
  Loop
End Sub
・ツリー全体表示

【76196】フォルダー内のエクセルのシート名を順次...
質問  ペンネーム船長  - 14/10/13(月) 14:01 -

引用なし
パスワード
   【質問】
ただいま、別の質問で質問させていただいていますが、それを解決する前に
聞きたいことがあります。
『test』フォルダー内に複数あるエクセルを順次開き、それぞれのエクセルの
シート名を調べるコードですが、bufのエクセルが対象になりません。
どこがいけないのか教えて下さい。

Private Sub CommandButton1_Click()

Dim buf As String
Dim sh As Worksheet

Const path = "C:\Users\○●\Desktop\test\"

buf = Dir(path & "*.xls")

Do While buf <> ""
  Workbooks(" & buf & ").Open
  MsgBox "ブック名は『" & buf & "』です"
  MsgBox "アクティブブックは『" & ActiveWorkbook.Name & "』です"
      For Each sh In Worksheets
        Workbooks(" & buf & ").sh.Select
        MsgBox "シート名は『" & Workbooks(" & buf & ").sh.Name & "』です"
      Next sh
 buf = Dir()
Loop

End Sub
・ツリー全体表示

【76195】Re:シート名の先頭が変化するシートを特...
発言  γ  - 14/10/13(月) 9:32 -

引用なし
パスワード
   >エラー処理と組み合わせてシート名を割り出す方法で可能は可能でしょうし、
は間違いです。
例えばこんな風です。

Function getSheetName(bookName As String) As String
  Dim sheet As String
  Dim target As String
  Dim s
  Dim k As Long

  For k = 1 To 99
    sheet = Format(k, "00") & "あいうえお"
    target = "'" & Path & "[" & bookName & "]" & sheet & "'!R1C1"
    s = ExecuteExcel4Macro(target)
    If TypeName(s) <> "Error" Then Exit For
  Next
  getSheetName = sheet
End Function
(Path などはモジュールレベルで定義済みとします。)

なお、上記を勧めているわけではなく、論理的な誤りを修正しただけです。
・ツリー全体表示

【76194】Re:シート名の先頭が変化するシートを特...
発言  γ  - 14/10/13(月) 6:02 -

引用なし
パスワード
   こんにちは。
ht tp://excel-ubara.com/excelvba5/EXCELVBA242.html
を参考にして下さい。
ExecuteExcel4Macroは特定の場合に限って使うべきで、
シート名が特定出来ない場合は、適当ではありません。

エラー処理と組み合わせてシート名を割り出す方法で可能は可能でしょうし、
シート名を直接取得する方法があるのかもしれませんが、
古い時代のマクロについては資料も乏しく、
そこに資源を投入して検討することは、殆ど時間の無駄と思われます。

普通に開いて、worksheetsコレクションを
Like で調べるのがよろしいかと思います。

しかも多数のセルを走査するのであれば、時間的にも
普通に開いてFindを使う方が、4,5倍は速くなるはずです。
先日の投稿の例で実験してみて下さい。
・ツリー全体表示

【76193】シート名の先頭が変化するシートを特定し...
質問  ペンネーム船長  - 14/10/12(日) 23:30 -

引用なし
パスワード
   【質問】
『test』フォルダーの中に複数のエクセルがあります。
それぞれのエクセルのシート名が『01あいうえお』だったり『05あいうえお』だったり『89あいうえお』だったりします。
下記のコードは、シート名が『01あいうえお』の場合だけ機能します。
これを、上記のシート名でも動くコードにしたいのです。
御教授お願いします。
なお、シート名『あいうえお』は不変で、必ずその頭に2桁の数字が来ます。
一桁の数字の表現は『1』ではなく、『01』となります

Private Sub CommandButton1_Click()
  Worksheets("調査結果").Range("B8:B1000").Value = "" 'クリア
  Dim buf As String, Target As String, i As Integer, n As Integer, nn As Integer
  Const Path = "C:\Users\○●\Desktop\test\"
  buf = Dir(Path & "*.xls")

  Do While buf <> ""
    For i = 1 To 1000
    n = 0
    nn = 0
    Target = "'" & Path & "[" & buf & "]01あいうえお!R" & i & "C7"
     If ExecuteExcel4Macro(Target) = "2-" Then
       nn = n + 1 'セルに『2-』があったときに1を加える
       Exit For
     End If
    Next i
     If nn = 0 Then '合計が0のとき、そのエクセルの名前を書き出す
        Worksheets("調査結果").Cells(Rows.Count, 2).End(xlUp).Offset(1, 0) = buf
     End If
    buf = Dir()
  Loop
End Sub
・ツリー全体表示

【76192】Re:タブレット端末で実行できるようにし...
発言  γ  - 14/10/12(日) 11:42 -

引用なし
パスワード
   こんにちは。
コード内容をつぶさに拝見していませんが、
タブレット以外の通常のPCでは動作すると思います。
(Selectを多用している点や、インデントがつけられていないなどの
 改善点はありますが。)
タブレッドだからといって、特別なExcelコードがあるわけではないと思います。

むしろ、タブレットでは、(タブレットではないPCの)ダブルクリックなどに
相当する操作がきちんとできているのか、
そちらを確認することが大切ではないでしょうか。
・ツリー全体表示

【76191】Re:B列とC列と同じ値をA列→C列にして特...
お礼  マルク  - 14/10/12(日) 10:12 -

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


教えていただいた関数で自分のやりたいことが出来ました!!
こういう多岐にわたる条件でも関数で処理出来ることに感銘です。
この関数を自動入力させてマクロで組んでみようと思います。
非常に助かりました。
ありがとうございます。


▼独覚 さん:
>あっ、今回の場合は式を
>=IF(D4<>"管理","",LOOKUP(1,0/((C$4:C$20000=C4)*(D$4:D$20000="親管理")),A$4:A$20000))
>でも。
・ツリー全体表示

【76190】Re:B列とC列と同じ値をA列→C列にして特...
発言  独覚  - 14/10/12(日) 7:58 -

引用なし
パスワード
   あっ、今回の場合は式を
=IF(D4<>"管理","",LOOKUP(1,0/((C$4:C$20000=C4)*(D$4:D$20000="親管理")),A$4:A$20000))
でも。
・ツリー全体表示

【76189】Re:B列とC列と同じ値をA列→C列にして特...
発言  独覚  - 14/10/12(日) 7:48 -

引用なし
パスワード
   ▼マルク さん:
関数と一般機能を使う案だけれども。

E4セルに
=IF(D4<>"管理","",INDEX(A$4:A$20000,MATCH(1,INDEX((C$4:C$20000=C4)*(D$4:D$20000="親管理"),0),0)))
と入力して下へフィルコピー。

E4セルを選択した状態でShiftキーとCtrlキーを押しながら下矢印キーを押し、セルが
選択された状態でコピー。
C4セルを選択して形式を選択して貼り付けで値の貼り付けでどうでしょう?

なお、上の式はデータの最大が20000行までの場合なのでもっと多い場合は式の中の
20000の部分をもっと大きくしてください。
・ツリー全体表示

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