Excel VBA質問箱 IV

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

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


1 / 3694 ページ 前へ→

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

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

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

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

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

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

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

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

【79516】CSV出力時の動作について
質問[NEW]  おべ  - 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:最終行の変動した連続データー
発言[NEW]  マナ  - 17/11/23(木) 19:49 -

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

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

【79514】Re:最終行の変動した連続データー
質問[NEW]  トキノハジメ  - 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:最終行の変動した連続データー
発言[NEW]  マナ  - 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という名前にリネームしたいです。

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

【79504】Re:excel2013にて発生するworkbooks.Ope...
回答  まっつわん  - 17/11/20(月) 16:56 -

引用なし
パスワード
   >path = path & "\" & fileA

↑ファイルのフルパスですよね?
拡張子までちゃんと書いて見てはいかがでしょう?
違うかも知れないけど気になります。
・ツリー全体表示

【79503】Re:excel2013にて発生するworkbooks.Ope...
発言  w1709  - 17/11/14(火) 18:33 -

引用なし
パスワード
   >変数名が「path」だと、予約語なのでエラーになる可能性はありましたが、

それ予約語でしょうか?

自分が思う予約語とは
例)
  Dim if as String

入力しただけで警告が出る(または色がつく)
実行すればコンパイルエラー(実行時エラーじゃなくて)
・ツリー全体表示

【79502】Re:【VBA】配列に収納されたRange型の中...
お礼  はみかん  - 17/11/9(木) 21:22 -

引用なし
パスワード
   さらに添え字を付ければよかったのですね
ありがとうございました!!
・ツリー全体表示

【79501】Re:【VBA】配列に収納されたRange型の中...
回答  γ  - 17/11/8(水) 21:10 -

引用なし
パスワード
   例えば、こんな書き方があります。

Sub test()
  Dim ary1, ary2
  Dim r1 As Range
  Dim r2 As Range
  Dim j As Long
  Dim k As Long
  
  ary1 = Array(Range("A1:B2"), Range("D1:F3"))
  ary2 = Array(Range("A11:B12"), Range("D11:F13"))
  
  For j = LBound(ary1) To UBound(ary1)
    Set r1 = ary1(j)
    Set r2 = ary2(j)
    For k = 1 To r1.Count
      If r1(k).Value = r2(k).Value Then
        r1(k).Interior.Color = vbRed
        r2(k).Interior.Color = vbRed
      End If
    Next
  Next
End Sub

追加要望にはお応えいたしません。
貴兄がトライしてください。
・ツリー全体表示

【79500】【VBA】配列に収納されたRange型の中身の...
質問  はみかん  - 17/11/8(水) 20:20 -

引用なし
パスワード
   はじめまして

配列A{
複数のセル範囲(range型),
複数のセル範囲(range型),
複数のセル範囲(range型)}

配列B{
複数のセル範囲(range型),
複数のセル範囲(range型),
複数のセル範囲(range型)}

上のような配列があり、
「配列Aのp個目のセル範囲のn個目のセル」と「配列Bのp個目のセル範囲のn個目のセル」
同士を比較し、一致していればそのセルを赤く塗り潰したいです

ですが検索してもセル範囲から一部セルを抽出するような記述が見つからず、悩んでいます

記述法をご存知の方がいらっしゃいましたら、ご教示いただけますでしょうか

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

1 / 3694 ページ 前へ→
ページ:  ┃  記事番号:
2610219
(SS)C-BOARD v3.8 is Free