Excel VBA質問箱 IV

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

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


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

【79524】Re:集約データの参照元ブック名を取得し...
発言  マナ  - 17/11/24(金) 23:26 -

引用なし
パスワード
   ▼よっちゃん さん:

ごめんなさい。今日はもう返事できません。

Private Sub CommandButton1_Click()
  Dim ブック As Worknook
  Dim フォルダ As String
  Dim buf As String
  
  '画面更新の停止
  Application.ScreenUpdating = False
  Application.DisplayAlerts = False
  '自動再計算の中止
  Application.Calculation = xlCalculationManual
  
  'シートの削除
  Range("A6:Z65536").Clear
  
  フォルダ = Range("A2").Value & "\"
  
  'データ集約
  buf = Dir(フォルダ & "*.xlsx")
  Do While buf <> ""
    Set ブック = Workbooks.Open(フォルダ & buf)
    Range("A65536").End(xlUp).Offset(1, 0).Value = buf
    ブック.Sheets("入力用").Range("C73:Q102").Copy Range("A65536").End(xlUp).Offset(1, 0)
    ブック.Close SaveChanges:=False
    buf = Dir()
  Loop
  
  Application.ScreenUpdating = True
  Application.DisplayAlerts = True
  Application.Calculation = xlCalculationAutomatic
  
End Sub
・ツリー全体表示

【79523】Re:集約データの参照元ブック名を取得し...
回答  よっちゃん  - 17/11/24(金) 23:10 -

引用なし
パスワード
   早速の返信ありがとうございます。

大変申し訳ありません。
正直、ネット上の情報を元に組み立てたプログラムのため、
深く理解をしておりませんでした。

もしよろしかったら、どのようなプログラムがあるか、
紹介していただけると助かります。

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

【79522】Re:集約データの参照元ブック名を取得し...
発言  マナ  - 17/11/24(金) 22:37 -

引用なし
パスワード
   ▼よっちゃん さん:

ブック名はbufであることは理解できていますか?
なので、それを希望のセルに書き込めばよいです。
・ツリー全体表示

【79521】集約データの参照元ブック名を取得しセル...
質問  よっちゃん  - 17/11/24(金) 22:15 -

引用なし
パスワード
   初めまして。
VBA初心者のよっちゃんと申します。
勉強不足で初歩的な質問が多いかもしれませんが、よろしくお願いします。

下記のようなプログラムを作成してデータ集約を行っています。
データ集約自体に下記プログラムで問題はないのですが、
データを集約した元ブックの名称を併せて取得したいと考えています。
ネット上でも探してみたのですが、思うようなプログラム紹介が
ありませんでした。

お忙しいと中申し訳ありませんが、ご教授をよろしくお願いします。


Private Sub CommandButton1_Click()
Dim buf As String, i As Long
Dim j

'画面更新の停止
  Application.ScreenUpdating = False
  Application.DisplayAlerts = False
'自動再計算の中止
  Application.Calculation = xlCalculationManual

'シートの削除
Range("A6:Z65536").Clear

'データ集約
buf = Dir(Sheets("集約").Range("A2").Value & "\*.xlsx")
Do While buf <> ""
Workbooks.Open Worksheets("集約").Range("A2").Value & "\" & buf
Sheets("入力用").Range("C73:Q102").Copy
ThisWorkbook.Activate
Range("A65536").End(xlUp).Offset(5, 0).Select
ActiveSheet.Paste
Workbooks(buf).Activate
Application.CutCopyMode = False
Workbooks(buf).Close SaveChanges:=False
buf = Dir()
Loop

'空白行の削除
Columns("A").SpecialCells(xlCellTypeBlanks).Select
Selection.EntireRow.Delete
Application.CutCopyMode = False

End Sub

・ツリー全体表示

【79520】Re:最終行の変動した連続データー
お礼  トキノハジメ  - 17/11/24(金) 9:25 -

引用なし
パスワード
   ▼マナ さん:
色々アドバイス有難うございました。

いいのが見つかりましたので、勉強します。

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

【79519】Re:CSV出力時の動作について
発言  γ  - 17/11/23(木) 22:42 -

引用なし
パスワード
   ▼おべ さん:
>早速の返信ありがとうございます
>何時かこれが原因でやらかしそうな気はしますが
>現状それが正常な挙動のようなので、この形で作成を続けようと思います
"やらかす"ねえ。そう言われてもねえ。

ところで、シートをそのままCSVファイルで保存という手もあると思いますが、
そうしない積極的な理由がありますか?
・ツリー全体表示

【79518】Re:CSV出力時の動作について
お礼  おべ  - 17/11/23(木) 22:30 -

引用なし
パスワード
   早速の返信ありがとうございます
何時かこれが原因でやらかしそうな気はしますが
現状それが正常な挙動のようなので、この形で作成を続けようと思います
・ツリー全体表示

【79517】Re:CSV出力時の動作について
回答  γ  - 17/11/23(木) 22:24 -

引用なし
パスワード
   そういう仕様だと理解するしかないと思います。
・数値は前後に半角スペースを入れて出力する
・文字列はそのまま出力する

それが不都合なら、ユーザーが補正すればよいだけです。
・""を付けて文字列にする。
・文字列と文字列の間にSpc(n)を入れる、等。
・ツリー全体表示

【79516】CSV出力時の動作について
質問  おべ  - 17/11/23(木) 21:47 -

引用なし
パスワード
   失礼します
Excel2010で、セルの内容をCSV出力するマクロを作成しているのですが

・Print #1, cells(1,1);
で出力すると
セルA1が数値のみの場合(例「10」)
CSVには「 10 」と、前後に空白が付加され出力されてしまいます
セルA1が文字のみの場合(例「null」)
CSVには「null」と出力されます

・Print #1,Cells(1,1) & "";
とすると、数値も文字も空白は付加されません

この差の原因は、一体何なのでしょうか
数値出力時に正負の符号を(勝手に)追加している
関連の事が問題であれば、後者の場合も同様に空白を付加して欲しいのですが…

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

【79515】Re:最終行の変動した連続データー
発言  マナ  - 17/11/23(木) 19:49 -

引用なし
パスワード
   ▼トキノハジメ さん:

オートフィルタを使ったことがないということでしょうか。
もしそうなら、ネット検索し使用方法を調べてください。
・ツリー全体表示

【79514】Re:最終行の変動した連続データー
質問  トキノハジメ  - 17/11/23(木) 18:58 -

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

>こんな感じで考えてみてはどうでしょうか。
>
>1)1行目に行挿入
>2)オートフィルタでA列3,B列1を抽出
>3)G2にコピー
>4)B列2で抽出
>5)G11にコピー
>6)A列5,B列1を抽出
>7)M2にコピー
>8)B列2で抽出
>9)M11にコピー
>10)オートフィルター解除
>11)1行目を削除

お返事有難うございます。
抽出したものとコピーのところが良く解りません。少し解説を頂けないでしょうか宜しくおねがいいたします。
・ツリー全体表示

【79513】Re:最終行の変動した連続データー
発言  マナ  - 17/11/22(水) 20:11 -

引用なし
パスワード
   ▼トキノハジメ さん:

こんな感じで考えてみてはどうでしょうか。

1)1行目に行挿入
2)オートフィルタでA列3,B列1を抽出
3)G2にコピー
4)B列2で抽出
5)G11にコピー
6)A列5,B列1を抽出
7)M2にコピー
8)B列2で抽出
9)M11にコピー
10)オートフィルター解除
11)1行目を削除
・ツリー全体表示

【79512】最終行の変動した連続データー
質問  トキノハジメ  - 17/11/22(水) 10:52 -

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

連続したデーター表記を整理整頓してコピー(指定の場所に)したいのですが。

最終行変動したところで振り分けたい。

   A表        B表        C表        
  A B C D E F G H I J K L M N O P Q  
1  3 1 1 * *   3 1 1 * *   5 1 1 * * 
2  3 1 2 * *   3 1 2 * *   5 1 2 * *  
3  3 1 3 * *   3 1 3 * *   5 1 3 * *
4  3 1 4 * *   3 1 4 * *   5 1 4 * *
5  3 2 1 * *             5 1 5 * *
6  3 2 2 * *             5 1 6 * *
7  3 2 3 * *
8  3 2 4 * *
9  3 2 5 * *
10 5 1 1 * *   3 2 1 * *   5 2 1 * * 
11 5 1 2 * *   3 2 2 * *   5 2 2 * *
12 5 1 3 * *   3 2 3 * *   5 2 3 * *
13 5 1 4 * *   3 2 4 * *   5 2 4 * *
14 5 1 5 * *   3 2 5 * *   5 2 5 * * 
15 5 1 6 * *             5 2 6 * *
16 5 2 1 * *             5 2 7 * *
17 5 2 2 * * 
18 5 2 3 * *
19 5 2 4 * *
20 5 2 5 * *1
22 5 2 6 * *
23 5 2 7 * *

A表ををB表、C表にコピー、最初はC行1,2,3,4まで をB表にコピー、A表その下B5の
行は2、C行はまた1に成るので、1,2,3,4,5をB表G10からコピー、その下のA10は5に
なるので 、C表のM2からコピー、またB16が2になるので、C表のM10よりコピーというようにしたいのですが、アドバイス宜しくお願い致します。

*のところは文字です。
・ツリー全体表示

【79511】Re:コンフィグからパラメータシート作成...
発言  γ  - 17/11/21(火) 23:34 -

引用なし
パスワード
   ちなみに、実行が成功することを確認して投稿しています。
・ツリー全体表示

【79510】Re:コンフィグからパラメータシート作成...
お礼    - 17/11/21(火) 23:26 -

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

回答ありがとうございます。

残念ながら、エラーの修正方法が分かりませんでした。
多分、実行押したら慣れている方ならできるんだろうなーと思いますが・・・。

私は手でパラメータシートの作成頑張ります。(笑)

ご対応、ありがとうございました!
クローズします!
・ツリー全体表示

【79509】Re:コンフィグからパラメータシート作成...
発言  γ  - 17/11/21(火) 23:03 -

引用なし
パスワード
   参考例です。

Sub test()
  Dim dic As Object
  Dim re As Object
  Dim s As String
  Dim filename As String

  Dim mat() As String ' 結果を書き出すための配列
  
  Dim k As Long
  Dim p As Long
  Dim matches As Object
  Dim s1 As String
  Dim s2 As String
  Dim s3 As String

  Set dic = CreateObject("Scripting.Dictionary")

  Set re = CreateObject("VBScript.RegExp")
  re.Pattern = "edit (\d+)|\s*set\s*(\S*)\s*(.*)"

  filename = "D:\MyDocuments\201711\test.txt" '■要修正

  k = 0
  p = 1
  
  Open filename For Input As #1
  Do While Not EOF(1)
    Line Input #1, s
    If s <> "next" And s <> "" Then
      Set matches = re.Execute(s)
      s1 = matches(0).SubMatches(0)  ' editの後の数値
      s2 = matches(0).SubMatches(1)  ' キー項目
      s3 = matches(0).SubMatches(2)  ' 対応する値
      
      If s1 <> "" Then
        k = k + 1
        ReDim Preserve mat(1 To 20, 1 To k) '項目数は20個が上限とした
        mat(1, k) = s1
      Else
        If Not dic.exists(s2) Then
          p = p + 1
          dic(s2) = p
        End If
        mat(dic(s2), k) = s3
      End If
    End If
  Loop
  Close #1
  
  '結果の書き出し
  [A1].Value = "ID"
  [B1].Resize(1, p - 1) = dic.keys
  [A2].Resize(k, 20).Value = Application.Transpose(mat)
End Sub

修正依頼にはお応えできませんので、悪しからず。
・ツリー全体表示

【79508】Re:コンフィグからパラメータシート作成...
発言    - 17/11/21(火) 22:45 -

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

ご返信ありがとうございます。

ご指摘の通り、dstintfでした。下に修正版を記載します。

configからパラメータシートの作成をやらなきゃならないんですが、内容的にはこれをベースに内容を修正して、config全体を抽出したいと考えています。

edit 1234
set uuid 1a1a23d4-e567-8f90-1a11-ab1acd23e456f
set srcintf "VLAN8001"
set dstintf "VLAN9001"
set srcaddr "192.168.0.2" "192.168.0.3" "192.168.1.2"
set dstaddr "172.16.0.1" "172.16.0.2"
set action accept
set status disable
set schedule "always"
set service "DNS" "HTTP"
set utm-status enable
set logtraffic all
set ips-sensor "AAA"
set profile-protocol-options "BBB"
set ssl-ssh-profile "CCC"
next
edit 5678
set uuid 2b2b45e5-f123-4aa12-2b22-bc2bde45f123a
set srcintf "any"
set dstintf "VLAN6001"
set srcaddr "192.168.1.4" "192.168.1.5"
set dstaddr "172.31.1.7" "172.31.1.8"
set action accept
set schedule "always"
set service "MAIL"
set utm-status enable
set logtraffic all
next
・ツリー全体表示

【79507】Re:コンフィグからパラメータシート作成...
発言  γ  - 17/11/21(火) 21:21 -

引用なし
パスワード
   srcintf がふたつあるのはなぜですか?(destinationじゃなくて?)
同一キーで複数のデータがあるときの扱いは?

内容的には、IT関連のものですよね。
これは下請けに出しているってことですか?
・ツリー全体表示

【79506】Re:excel2013にて発生するworkbooks.Ope...
発言  ペーターパン  - 17/11/21(火) 12:46 -

引用なし
パスワード
   ▼まっつわん さん:
>>path = path & "\" & fileA
>
>↑ファイルのフルパスですよね?
>拡張子までちゃんと書いて見てはいかがでしょう?
>違うかも知れないけど気になります。

fileaの中身は拡張子付きのフルパスで、拡張子付きで変数を格納しています。

あれからいろいろと検証してみました。
守秘義務があるので簡単ですが、以下のようにメッセージボックスに
取得したパスが出るようにしてみました。

path = ActiveWorkbook.Path
path = path & "\" & fileA
Workbooks.Open Filename:=path ←ここで止まる
msgbox path


【結果】
・パスが取得できていることをメッセージボックスで確認してからokボタン押すとうまく動きます。
・次はメッセージボックスが出る前からエンターキー押しっぱなし。
 止まります。
・命令で3秒待つようにするとうまく動きます(前回も実施済み)。

よって、以下の通り推測します。
あくまで素人の推測ですので、分かりにくい点があるかと思いますがご容赦下さい。

・パスの「アドレス」つまり文字列自体の取得は問題なく実行されている。
・パスの「アドレス」を利用して対象のファイルを開く場合、そのアドレスをPCおよびエクセルが認識して「処理」するまでにはタイムラグが生じている。
つまり、「アドレス」という文字列とそれを認識して「処理」する行為(エクセルを開くなど)にはタムラグがあるため、変数にパスが取得できているからといって即実行できるとは限らない。
・おそらくEXCEL2013からSDI形式に変更されたことが影響していると思っています。

いろいろとご助力頂きありがとうございました。
・ツリー全体表示

【79505】コンフィグからパラメータシート作成につ...
質問    - 17/11/20(月) 20:49 -

引用なし
パスワード
   config.txt

edit 1234
set uuid 1a1a23d4-e567-8f90-1a11-ab1acd23e456f
set srcintf "VLAN8001"
set srcintf "VLAN9001"
set srcaddr "192.168.0.2" "192.168.0.3" "192.168.1.2"
set dstaddr "172.16.0.1" "172.16.0.2"
set action accept
set status disable
set schedule "always"
set service "DNS" "HTTP"
set utm-status enable
set logtraffic all
set ips-sensor "AAA"
set profile-protocol-options "BBB"
set ssl-ssh-profile "CCC"
next
edit 5678
set uuid 2b2b45e5-f123-4aa12-2b22-bc2bde45f123a
set srcintf "any"
set srcintf "VLAN6001"
set srcaddr "192.168.1.4" "192.168.1.5"
set dstaddr "172.31.1.7" "172.31.1.8"
set action accept
set schedule "always"
set service "MAIL"
set utm-status enable
set logtraffic all
next


sheet2
  A  B                   C     D     E                     F               O
1 ID  uuid                 srcintf  srcintf  srcaddr                  dstaddr          ・・・ ssl-ssh-profile
2 1234 1a1a23d4-e567-8f90-1a11-ab1acd23e456f "VLAN8001" "VLAN9001" "192.168.0.2" "192.168.0.3" "192.168.1.2" "172.16.0.1" "172.16.0.2" ・・・ "CCC"
3 5678 2b2b45e5-f123-4a12-2b22-bc2bde45f123a "any"   "VLAN6001" "192.168.1.4" "192.168.1.5"        "172.31.1.7" "172.31.1.8" ・・・   

VBAがわからないため、得意な方にご教授頂ければありがたいです。

config.txtのedit〜nextまでを1固まりとして、大体500行くらいのconfigがあり、これをテキストでsheet1に
手動で貼り付けます。
このconfig.txtの中身を、sheet2にパラメータシートとして作成したいと思っています。

そのため、editを項目名でIDとしてA1に、uuidをB1に、srcintfをC1に、という形で、sheet2のようにedit1234の順に並べていき、
O1にssl-ssh-profileまで項目名として1行目に設定したあと、
中の値を2列目以降に書き出し、nextまで転記したら、次の行に移り転記を繰り返し、最後のnextまで行ったら終了する
というVBAマクロを用意したいと考えています。
edit5678のように1列目で定義したフィールドが無い場合にはスキップで構いません。

※sheet1はconfig、sheet2はparameterという名前にリネームしたいです。

お手数おかけしますが、宜しくお願い致します。
・ツリー全体表示

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