トップページtech
1002コメント374KB

Excel VBA 質問スレ Part45 [無断転載禁止]©5ch.io

■ このスレッドは過去ログ倉庫に格納されています
0001デフォルトの名無しさん2017/01/03(火) 02:51:16.56ID:9Y8iTik6
ExcelのVBAに関する質問スレです
コード書き込みや作成依頼もOK

※前スレ
Excel VBA 質問スレ Part44
http://echo.2ch.net/test/read.cgi/tech/1479421482/


※関連スレ
VBAなんでも質問スレ Part2
http://echo.2ch.net/test/read.cgi/tech/1432173164/
Access VBA 質問スレ Part1
http://echo.2ch.net/test/read.cgi/tech/1328536426/
Excel総合相談所 125
http://echo.2ch.net/test/read.cgi/bsoft/1481369538/
0170デフォルトの名無しさん2017/01/17(火) 00:17:50.89ID:jzPK8o2C
>>169
いやだから頭から一つ一つ舐めていく必要があるかどうかの違い
0171デフォルトの名無しさん2017/01/17(火) 00:26:02.89ID:Upzxz6/t
>>170
近似値だと頭から見なくてよいのはなんで
具体的にどうやってると考えてるの
0172デフォルトの名無しさん2017/01/17(火) 00:28:39.30ID:jzPK8o2C
>>171
辞書で単語を引くときにやっているやり方さ
0173デフォルトの名無しさん2017/01/17(火) 00:32:26.63ID:Upzxz6/t
>>172
辞書を作るときは頭から見なくてよいの?
0174デフォルトの名無しさん2017/01/17(火) 01:00:47.32ID:035vzIzN
>>173
書籍としての辞書を利用するときをイメージするといいかも
まず視覚的に先頭文字の見出しの位置を開いて調べる
この感覚

近似値を利用する場合は「文末違うけどだいたいこんな感じだよね」って得るためより正確な情報を得るためにはソートする必要がある
完全一致だとそもそも一致していることが条件となるのでソートする必要がなくなる

正確に言うと異なると思うけどだいたいこんなイメージ
0175デフォルトの名無しさん2017/01/17(火) 01:13:18.56ID:mp4Rluyj
https://msdn.microsoft.com/ja-jp/library/office/ff726673(v=office.14).aspx#xlLookups
0176デフォルトの名無しさん2017/01/17(火) 06:36:26.66ID:Upzxz6/t
>>174
完全一致でも昇順に並べられていることを前提とすれば辞書方式が使えると思うけどな
0177デフォルトの名無しさん2017/01/17(火) 07:13:51.32ID:jzPK8o2C
>>176
使えるが そういう仕様に なってない
0178デフォルトの名無しさん2017/01/17(火) 09:11:54.79ID:035vzIzN
個人的には完全一致の場合ソート不要って仕様はありがたい
0179デフォルトの名無しさん2017/01/17(火) 19:24:38.16ID:gxb7F/t0
>>175

いろいろ勉強になりました。
十数年、vlookupは特殊な場合を除いて完全一致で使うものだと思っていました。
数十万のvlookupをかけて3時間ぐらい帰ってこないような処理をしたことがあり
いま考えると無謀だったなと、、
0180デフォルトの名無しさん2017/01/17(火) 20:31:05.76ID:EPmzwVho
xml文を読み込んで階層、パラメータ名、設定値を求めるvbaの書き方がわかりません。
どなたか教えてくださいお願いします。

イメージ図:
http://www.dotup.org/uploda/www.dotup.org1127385.jpg
I1にXML文、A〜G列の1-2行目がある状態でVBAを実行すると、
A〜G列の3行目から下が出力されるイメージです。
XML文全体は約500行のものが複数、どれも階層は4以下です。

以上、よろしくお願いします。
0181デフォルトの名無しさん2017/01/17(火) 21:21:06.99ID:pDqJREhG
>>180
この辺りを見てがんばれー
http://freefly3104.hatenablog.com/entry/2015/04/03/222516
0182デフォルトの名無しさん2017/01/17(火) 21:22:53.32ID:UOrZs7iT
>>180
ノード名もパラメーターとして出す(イメージ図で言う太字の箇所)
で良いのかい?

あと、階層の各列には同じ数値しか入らない
で良いのかい?

これを求めているのなら求めているで構わないけど得られる結果をまた精査することになると思う
0183デフォルトの名無しさん2017/01/17(火) 21:47:24.91ID:pDqJREhG
>>180
あと出力順が
1
 2
  3
  3
  3
のようになってるけど
1
 2
  3
  3
 2
  3
つまり Subject が2回出力されるんじゃダメ?
0184デフォルトの名無しさん2017/01/17(火) 21:49:25.15ID:EPmzwVho
>>181
ありがとう。
実はこのサイトとかを参考に試行錯誤したがうまくできくてここで尋ねたんだ。

>>182
はい、おっしゃる通り
・ノード名もパラメータとして(太字で)出す。
・階層の各列には同じ数字しか入らない。B列は空白か1か、C列は空白か2、・・・。
です。
0185デフォルトの名無しさん2017/01/17(火) 21:53:52.16ID:EPmzwVho
>>183
1
 2
  3
  3
 2
  3
のようにSubjectを2回出力するのだとだめです、申し訳ない。
これも、1人でできない原因の一つです。
許されたらfor文で各行に対してsplitとか使えばなんとかなりそうだけど・・・
0186デフォルトの名無しさん2017/01/17(火) 23:53:22.45ID:HYIsieSI
>>185
その場合
<xxx ...>
 <...>
 <...>
</xxx>
<yyy ...>
 <...>
 <...>
</yyy>
<xxx ...>
 <...>
 <...>
</xxx>
の場合はどのように出力するの?
タグ名毎に集約するの?
0187デフォルトの名無しさん2017/01/17(火) 23:55:02.78ID:HYIsieSI
最初が化けた...
<xxx ...>
 <...>
 <...>
</xxx>
<yyy ...>
 <...>
 <...>
</yyy>
<xxx ...>
 <...>
 <...>
</xxx>
のケースね。
0188デフォルトの名無しさん2017/01/18(水) 00:16:31.88ID:P2ujaP/J
>>187
はい、そのケースではタグ名毎に集約します。つまり、
<xxx ...>
<...>←yの上の1行目
<...>←yの上の2行目
<...>←yの下の1行目
<...>←yの下の2行目
</xxx>
<yyy ...>
<...>
<...>
</yyy>
と同値とみなします。(Fの列にyyyが1つだけ出る)

ただし、
<xxx ...>
<yyy ...>
</yyy>
</xxx>
<zzz ...>
<yyy ...>
</yyy>
</zzz>
のように階層が異なったり、一つは<xxx>,もう一つは<zzz>の下にあるような場合は、
<xxx>の下の<yyy>と<zzz>の下の<zzz>は別のものとして扱います。(Fの列にyyyが複数出る)
0189デフォルトの名無しさん2017/01/18(水) 07:02:26.64ID:KfZHaLf7
>>188
<xxx ...>
<yyy ...> -- (1)
</yyy>
</xxx>
<zzz ...>
<yyy ...> -- (2)
</yyy>
</zzz>
<xxx ...>
<yyy ...> -- (3)
</yyy>
</xxx>
のケースで (1) と (3) も集約するの?
たぶん xml からの読み込みと集約処理を分けた方がいいと思う。
0190デフォルトの名無しさん2017/01/18(水) 08:46:32.65ID:dxlKDUod
>>189
携帯から失礼します。
はい、その場合も集約します。

具体的にはどんなコードで書いたらよろしいですかね。
0191デフォルトの名無しさん2017/01/18(水) 10:08:50.79ID:nvWV6Cl1
https://youtu.be/quIHgwuF6r4
0192デフォルトの名無しさん2017/01/18(水) 10:46:36.89ID:mepmwC6J
Dictionaryの配列で書けるでしょ
0193デフォルトの名無しさん2017/01/18(水) 12:19:13.71ID:zXM8oXoh
なんで、XMLParser を自分で作るの?

Groovy とかで、すぐに出来るだろ
0194デフォルトの名無しさん2017/01/18(水) 12:35:52.38ID:4FnlBNL6
>>193
すぐw
じゃあ書いてみろよ
0195デフォルトの名無しさん2017/01/18(水) 12:38:39.68ID:NBGHKSlQ
さすがに MSHTML.HTMLDocument オブジェクトとかは使うんだろうと思っていたが違うのかな?
0196デフォルトの名無しさん2017/01/18(水) 12:54:48.99ID:Fv9px6Lv
特定のセルが書式を設定されてるかどうかの判定ってどうすればいいでしょうか?
例えば文字が入ってなくても色や太さが設定されてるとか
0197デフォルトの名無しさん2017/01/18(水) 13:04:49.97ID:UZ6KtMVe
>>196
普通にセルのプロパティで取得すればいいんでない
0198デフォルトの名無しさん2017/01/18(水) 13:07:57.97ID:Fv9px6Lv
>>197
If Range("A1").Value="" Then
でいけますか?
0199デフォルトの名無しさん2017/01/18(水) 13:25:21.60ID:UZ6KtMVe
>>198
forecolorとかbackcolorとかだよ
オブジェクトブラウザでcells調べてみ?
0200デフォルトの名無しさん2017/01/18(水) 15:02:26.86ID:zXM8oXoh
Groovyでは、
def root = new XmlParser().parse("ファイル名.xml")

root.タグ名.each{
println it.text()
ここで処理する
}

it は、イタレータから渡ってくる、暗黙の要素を指す
0201デフォルトの名無しさん2017/01/18(水) 17:11:44.24ID:XrR2JBi4
>>180
そもそも、なんでExcelに展開しようとしてるんだ?
それが最終目的か?

あと、自分でどこまでできたのか書いてくれ。
0202デフォルトの名無しさん2017/01/18(水) 17:46:16.92ID:WZOpQPDJ
http://smilejapan.net/wiki/index.php?VBA%20XMLデータをDOMで扱う方法

XML関連
0203デフォルトの名無しさん2017/01/18(水) 19:44:31.06ID:zXM8oXoh
<Subject japanese="kokugo">
<Subject math="sugaku">

1回目の<Subject>の際、japanese, math の、2つが取れているのは、Traverse の幅優先探索か?
普通は、深さ優先探索だけど

様々な言語を見たけど、日本語のサイトで、Traverse の処理を書いているサイトは、ほとんどない。
どないなっとんねん?
0204デフォルトの名無しさん2017/01/18(水) 20:09:10.01ID:P2ujaP/J
>>201
Excelに展開するのが最終目的であってます。
現在自分ではこのような状況・・・

DOMとかわからなくて挫折。xml文の各行をfor文で回してやっている。

【できたこと】
各行のXML文がどの階層についての話か調べる
階層 = (各行の<の前にある空白)×1のため、InStr("各行のXML文","<")-1で求めた。

【できないこと】
パラメータ名と設定値の抜出。
設定値に関してはsplit関数でできるかなと思ったが、
パラメータ名は「空白と=」や「<と空白」等で何で囲まれているかが異なっており、どうすればよいかわからない。

簡単に言うと、
I2:「 <examType first="zenki/shiken" second="koki/shiken" third="">」
とあるとき、
examTypeをF3、firstをF4、secondをF5、thirdをF6、
"zenki/shiken"をG4、"koki/shiken"をG5、""をG6に出す方法がわからない。
0205デフォルトの名無しさん2017/01/18(水) 20:17:32.50ID:WZOpQPDJ
xmlファイルをhtmlとして読み込めばいいんじゃね
でgetelementsbytagname()とかつかう
0206デフォルトの名無しさん2017/01/18(水) 20:26:10.85ID:9qUMY5Wm
>>204
馬鹿過ぎて話しにならない。
馬鹿に無理。
0207デフォルトの名無しさん2017/01/18(水) 20:47:34.80ID:IDSE4GPa
>>194
ふぅ
0208デフォルトの名無しさん2017/01/18(水) 21:15:38.89ID:zXM8oXoh
XML Parserは、jQuery, Groovy, Python, Ruby など、何にでもある

ただ、traverse の説明が、日本語のサイトでは見当たらない。
深さ優先ではなく、幅優先探索だろ?
0209デフォルトの名無しさん2017/01/18(水) 21:22:46.40ID:uheDDMMj
>>204
DOMじゃないと結構つらいかもよ 出来ん事はないけどね DOM勉強する気があるなら サンプル上げとくよ

DOM+再帰処理してるので詳細はググってねw
あと何階層でも良いのだけれど シートが4階層までしか用意されてないので 4階層に制限してます

'Microsoft XML v3.0 を参照設定
Sub main()
 Dim XMLDoc As MSXML2.DOMDocument
 Dim Row As Long
 Dim No As Long
 Row = 3 'シートに書き込む最初の行位置
 No = 1
 Set XMLDoc = New MSXML2.DOMDocument
 XMLDoc.Load "D:\XML.txt" 'XMLファイルを読み込む
 Call ListXml(XMLDoc.ChildNodes(1), Row, No, 1)
 Cells(Row, "G").Value = "FINISH"
End Sub

Sub ListXml(ByRef Node As IXMLDOMNode, ByRef Row, ByRef No, ByVal Level)
 Dim NodeList As IXMLDOMNodeList
 Dim Node1 As IXMLDOMNode
 Dim Node2 As IXMLDOMNode
 Dim NodeAttr As IXMLDOMAttribute
 'ノード名表示
 Cells(Row, "A").Value = No
 Cells(Row, "B").Offset(0, Level - 1).Value = Level
 Cells(Row, "F").Value = Node.nodeName
 Cells(Row, "G").Value = "-"
 Row = Row + 1
 No = No + 1
02102092017/01/18(水) 21:23:19.50ID:uheDDMMj
'続き
 'ノードパラメータ表示
 For Each NodeAttr In Node.Attributes
  Cells(Row, "A").Value = No
  Cells(Row, "F").Value = NodeAttr.Name
  Cells(Row, "G").Value = NodeAttr.Value
  Row = Row + 1
  No = No + 1
 Next
 '階層制限
 If Level = 4 Then Exit Sub

 '同じ名前の子ノードを 最初の一つに集約
 For Each Node1 In Node.ChildNodes
   Do
     Set NodeList = Node1.ParentNode.SelectNodes(Node1.nodeName)
     If NodeList.Length = 1 Then Exit Do
     For Each Node2 In NodeList(1).ChildNodes
       NodeList(0).appendChild Node2
     Next
     Node1.ParentNode.RemoveChild NodeList(1)
   Loop
 Next
 '子ノード処理(再帰)
 For Each Node1 In Node.ChildNodes
   Call ListXml(Node1, Row, No, Level + 1)
 Next
End Sub
0211デフォルトの名無しさん2017/01/18(水) 21:25:28.46ID:zXM8oXoh
XML Parserは、jQuery, Groovy, Python, Ruby など、何にでもある

ただ、traverse の説明が、日本語のサイトでは見当たらない。
深さ優先ではなく、幅優先探索だろ?

Java
http://www.technotype.net/tutorial/tutorial.php?fileId=%7BDOM%7D&;sectionId=%7Btraversing-the-node-tree%7D

子ノードリストを取得
NodeList list = parentNode.getChildNodes();

要素に従属する属性リストを取得
NamedNodeMap map = elementNode.getAttributes();

最悪、traverse 関数内で、traverse・自分自身を呼ぶ、再帰的な処理を作る。
traverse 関数が最初からあれば、もっと簡単。
それに幅優先探索を指定する
0212デフォルトの名無しさん2017/01/18(水) 21:56:11.82ID:P2ujaP/J
>>210
ありがとう。
実際やってみたらA3とB3に1が出力されて、
オブジェクト変数またはWithブロック変数が設定されていません
と言われました。どうしてだろ。。。

>>211
はい、幅優先探索です。
ありがとうございます。transverseについてちょっと調べてみます。
0213デフォルトの名無しさん2017/01/18(水) 22:00:58.72ID:uheDDMMj
>>212
XML規則に則ってる?
あと ノード名(タグ名?)は 大文字小文字 区別するぜ

どっか XMLファイルUP出来ない?
0214デフォルトの名無しさん2017/01/18(水) 22:08:43.87ID:uheDDMMj
>>212
もしかして↓このまま? 実際のXMLファイル名に修正してよね

XMLDoc.Load "D:\XML.txt" 'XMLファイルを読み込む
0215デフォルトの名無しさん2017/01/18(水) 22:12:35.06ID:P2ujaP/J
>>213
実際のXMLファイル名とそのパスにしています。
XML.txtの中身は以下の通りです。
<?xml version="1.0" encoding="UTF-8">
<examType first="zenki/shiken" second="koki/shiken" third="">
<Subject japanese="kokugo">
<Gendaibun min="50/100" max="85/100" />
<Kobun min="60/100" max="100/100" />
</Subject>
<Subject math="sugaku">
<IA min="30/100" max="80/100">
</IA>
</Subject>
</examType>
0216デフォルトの名無しさん2017/01/18(水) 22:29:42.43ID:uheDDMMj
>>215
XML読み込み失敗してるね

※XMLファイル修正(最後に?がない)
× <?xml version="1.0" encoding="UTF-8">
○ <?xml version="1.0" encoding="UTF-8"?>

※コード修正(読み込みエラーでたらMSGBOX)
XMLDoc.Load "D:\XML.txt" 'XMLファイルを読み込む
If XMLDoc.parseError.ErrorCode <> 0 Then
MsgBox XMLDoc.parseError.reason
Exit Sub
End If
0217デフォルトの名無しさん2017/01/18(水) 22:30:45.22ID:vXs3og/7
アドインのデータはどこに保存するのが標準的なの?
シートだと階層構造のデータを保存しにくいからxmlファイルにして保存したい
0218デフォルトの名無しさん2017/01/18(水) 22:41:40.88ID:P2ujaP/J
>>216
ありがとうございます。エラーはなくなりました。
ただ1つ問題が・・・
math,sugakuを読み込んでいない。8行目と9行目の間に入れたいのですが。

実行画面結果は以下のようになりました
http://www.dotup.org/uploda/www.dotup.org1128435.jpg
0219デフォルトの名無しさん2017/01/18(水) 22:50:58.80ID:uheDDMMj
>>218
'同じ名前の子ノードを 最初の一つに集約
で集約してるからそうなるが(その下は移動してる)

前からの レスで集約するって言ってたんじゃない?

'同じ名前の子ノードを 最初の一つに集約
の(FOR〜NEXT)部分ざっくり削除してみ
0220デフォルトの名無しさん2017/01/18(水) 23:09:44.67ID:P2ujaP/J
>>219
あー、申し訳ない。
7行目のSubjectの下に、japaneseとmathをまとめて出力するという意味で使ってしまっていました。
0221デフォルトの名無しさん2017/01/18(水) 23:20:05.28ID:P2ujaP/J
まとめて=8行目にjapanese,9行目にmath
という意味です
0222デフォルトの名無しさん2017/01/19(木) 00:09:17.23ID:wXKnExNu
>>221
こゆう事かな?(同じパラメータは 最後のに置き換えられるよ)
下をそっくり入れ替えて

 '同じ名前の子ノードを 最初の一つに集約
 For Each Node1 In Node.ChildNodes
  Do
     Set NodeList = Node1.ParentNode.SelectNodes(Node1.nodeName)
     If NodeList.Length = 1 Then Exit Do
     For Each Node2 In NodeList(1).ChildNodes
       NodeList(0).appendChild Node2
     Next
     'パラメータコピー
     For Each NodeAttr In NodeList(1).Attributes
      NodeList(0).Attributes.setNamedItem NodeAttr.CloneNode(True)
     Next
     Node1.ParentNode.RemoveChild NodeList(1)
  Loop
 Next
0223デフォルトの名無しさん2017/01/19(木) 00:38:26.41ID:qjpOvOJu
ここまで来ると、もうわけがわからんな。
プログラムでプログラム文を自動生成します、みたいな話だろ?
0224デフォルトの名無しさん2017/01/19(木) 05:02:36.80ID:WDgxZeys
何かの言語には、自動的に、traverse する関数があるはず。
または既に、外人が作って、Gitにあるはず。
日本のサイトで探しても、見つからない

それに、深さ優先探索か幅優先探索を指定する

Pythonのwalkは、あるディレクトリ以下の階層を渡り歩く。
つまり、それのXML版だろ

ディレクトリもXMLも、Tree だから、基本的には同じ
0225デフォルトの名無しさん2017/01/19(木) 06:58:46.51ID:JadLiFtg
>>217
> シートだと階層構造のデータを保存しにくいからxmlファイルにして保存したい
XML 文字列ををセルとかブックのプロパティとかに入れときゃいいだけじゃないの?
0226デフォルトの名無しさん2017/01/19(木) 07:34:02.29ID:R0f6tJX+
>>>222
できたああああああああああああ
ありがとうございます!
罫線やノード名の一部を太字にするなど微修正は自分でできました。

皆様ありがとうございました。
0227デフォルトの名無しさん2017/01/19(木) 12:16:13.59ID:SpG+j8gZ
   A  B
1 山田 10:50
2 山田 11:50
3 山田 4:50

山田の時間(B列)を1行目から順番に変数(a)に代入して合計を計算して、
Application.Floor(a + TimeValue("0:30"), TimeValue("1:00"))で
30分繰り上げ(例えば1:30の場合2:00に繰り上げ)しているのですが、
総計が24時間を超えると"1900/1/1  28:00"と日付が入り、表示形式がおかしくなってしまいます。
繰り上げのコードが間違っているのでしょうか?
0228デフォルトの名無しさん2017/01/19(木) 12:21:46.57ID:4RX8xFF/
>>227
[h]:mm
0229デフォルトの名無しさん2017/01/19(木) 12:47:27.51ID:ZXvOrtNX
>>228
解決しました
ありがとうございます
0230デフォルトの名無しさん2017/01/19(木) 15:08:53.45ID:SN1gevnS
初質問です!
エクセルにはブック共有状態で変更履歴記録機能があり、新しいシートに変更履歴一覧を作成できると思います。
そこで、VBAで変更期間「すべて」で「新しいシートに変更履歴一覧を作成」の操作をしたいのですが可能でしょうか?
大量のドキュメントの変更履歴を取りたいので、マクロ化したいのが目的です。
可能であればやり方を教えていただきたいです。よろしくお願い致します。
0231デフォルトの名無しさん2017/01/19(木) 15:37:44.80ID:irXhj7sG
>>230
とりあえずマクロの記録を試してみたら?
0232デフォルトの名無しさん2017/01/19(木) 15:50:51.90ID:9G0IwAcw
>>217
これは俺も知りたいc++だとxmlに書いてるのよく見るけどvbaはどうなんだ
0233デフォルトの名無しさん2017/01/19(木) 18:24:05.68ID:xZWyIIjd
Cell Property の .Valueと.Textでは取得のパフォーマンスに
大きな差があるようですがこんなものですか。
7万レコードのセル値取得に使ったのですが、前者は0.3秒ほど
後者は130秒かかりました。
上のほうのレスで .Textを見つけて喜んで使ってみたのですが、、
0234デフォルトの名無しさん2017/01/19(木) 20:17:42.34ID:irXhj7sG
>>233
Textの方は書式を評価しないといけないからそんなものじゃね?
0235デフォルトの名無しさん2017/01/19(木) 20:23:44.41ID:R0f6tJX+
0236デフォルトの名無しさん2017/01/19(木) 21:13:36.84ID:9zfnUwsN
>>234
なるほど
.Valueで取得してから書式あてた方が無難ですね
0237デフォルトの名無しさん2017/01/19(木) 23:40:16.64ID:qjpOvOJu
マジか!!
Valueで取得しようとすると、
#N/Aでコケるから、ずっとText使ってたわ!

ん?
でも0.3秒と130秒って違い過ぎじゃないか?
0.3秒なんて、For Nextじゃ取れないと思うが。
a=Range("A1:A70000").Valueとかじゃないと。
0238デフォルトの名無しさん2017/01/20(金) 04:41:52.83ID:9/J9Uge2
>>237
そう言われると、、あらためて追試。
試したコードはこんな感じ。

Cells(1, 1).Resize(70000, 1).Select

  '------------------------------
st = Timer
For Each r In Selection
var = r.Value
Next
ed = Timer
Debug.Print "by .Value", ed - st; "[Sec]"

  '------------------------------
st = Timer
For Each r In Selection
var = r.Text
Next
ed = Timer
Debug.Print "by .Text", ed - st; "[Sec]"

セルには[1-70000]のシーケンシャルな数値を格納
これの書式なしと書式あり"[h]:mm"を試しました。
(続く)
0239デフォルトの名無しさん2017/01/20(金) 04:43:33.99ID:9/J9Uge2
>>237

(続き)

結果、、
---------------------------------------------
by .Value 0.1855469 [Sec]
by .Text 1.241211 [Sec]
by .Value (Formatted) 0.1806641 [Sec]
by .Text (Formatted) 1.569336 [Sec]
---------------------------------------------

結果、差はあるものの、日中にテストしたものほど
は差がでませんでした。
日中のデータで再度試した結果です。
---------------------------------------------
by .Value (Formatted) 0.2011719 [Sec]
by .Text (Formatted) 99.20215 [Sec]
---------------------------------------------

他の要因もあるかもしれません。
実際のデータはOracleからSQLで引っ張ってきた
テーブルを.Unlistしたもので、70000行x130列ほど
の大きさ。これのV列あたりにある "hh:mm"書式が
当たっているというものです。
自動再計算はOffです。
0240デフォルトの名無しさん2017/01/20(金) 11:00:31.99ID:32Bwzd9P
VBA初歩的です。
シート1のA列で文字列の色を変えてその後A列に同じ文字列が書き込まれたら同じ色に変えたいんです。
そして出来たらシート2のA列の同じ文字列も同じ色にしたいんです。
誰かコード分かる方いますでしょうか?
0241デフォルトの名無しさん2017/01/20(金) 13:04:58.83ID:nnKMBoVD
>>240
スマホから書き込もうと思ったら案外大変で諦めた

A列の重複を排除したリストを作成(配列、コレクション等)
リストとA列を比較して色を指定
で行けるんだけど、何がわからんのか
文字列の種類は不定なのか固定なのか、色に指定はあるのかなど情報も少ない
0242デフォルトの名無しさん2017/01/20(金) 13:05:01.85ID:JXdqXSkU
初歩的?
自分でマクロの記録で調べろよ
0243デフォルトの名無しさん2017/01/20(金) 14:58:10.41ID:Nvso2zBq
質問じゃなくてタダで作ってくれって言ってるんやで
0244デフォルトの名無しさん2017/01/20(金) 16:54:43.86ID:bVBZQrA4
失礼します
学校でgoogle financeのapiを利用したのを作成しているのですが
A列の証券コードの羅列を読み取りURLに追加しJSONのティックデータを取得するところまでは
行けたのですが、どうやって個々にパースすればいいかわかりません、生データを取得するまでのコードは以下
Dim W As Worksheet: Set W = ActiveSheet
Dim i As Integer
Dim Last As Integer
Last = W.Range(
0245デフォルトの名無しさん2017/01/20(金) 16:59:50.09ID:bVBZQrA4
うまく書き込めなかったようです
取得したでーたは下のurlの通りです
https://finance.google.com/finance/info?client=ig&;q=TYO:1332,1515,1925,7203,8058,8766,8801,9501,1954,1973,2928,2172,7980,6656,9085,5998,4556,1381,1400,1382,1739,2173,2351,7464,1734,7958,1736,2425,6960,2121


とずっと続いています
これを個々にパースしてセルごとに振り分けたいのですが
個々にパースするにはどのようにすればいいかわかりません
誰か助けてください
0246デフォルトの名無しさん2017/01/20(金) 17:12:18.70ID:gQ8iElJX
>>244
"vba json パース"でググる
0247デフォルトの名無しさん2017/01/20(金) 18:21:41.59ID:FuK3VNeE
>>240
在日か?日本語不自由そうだな
0248デフォルトの名無しさん2017/01/20(金) 18:33:30.59ID:Zm/Pjw4E
すいません楽天rss使ってるのですが
vbaからセルに10銘柄程コードを入れても頻繁にすべてN/Aと出てしまうのです
接続が切れてるわけではなく、例えばexcelの上書き保存をクリックするとN/Aが
消えてすべて表示されるのです

vbaでは画面の更新は切ってないのですが原因は考えられますか?
0249デフォルトの名無しさん2017/01/20(金) 19:25:28.08ID:gGEm4cbB
VBAでWebAPI叩きたくなる気持ちが理解できない
PowerShellやC#やVB.NETじゃダメだったのか
0250デフォルトの名無しさん2017/01/20(金) 20:22:24.18ID:ymDflbNb
>>249
結果を Excel で処理したいんだろ
なら VBA が一番自然だわな
ただ言語としての機能がいまいちだから俺なら PowerShell で取得して Excel に書き込むかな
0251デフォルトの名無しさん2017/01/20(金) 20:58:17.11ID:mJKyjGCe
>>249
いや、いいんじゃないか?
ただスレチになるから
そういう話は.Netのスレでやればいいだけで
0252デフォルトの名無しさん2017/01/20(金) 21:08:26.20ID:MJq7L3EO
https://www.google.com/finance/getprices?p=1d&;f=d,h,o,l,c,v&i=300&x=INDEXNIKKEI&q=NI225
これ?
DATA_SESSIONS はjsonの配列表記っぽいけど、データ部は単なるカンマ区切りのような(他も改行区切りだしjsonじゃないような)

.NETもjsonのパースにはNuGetが必要じゃなかったっけ(なんかDLLが増えるのが嫌で自力パースしたことある)
PowerShellはjsonのパースもできるのか
0253デフォルトの名無しさん2017/01/20(金) 21:31:05.58ID:z3TtdYe7
>>249
えくせるしかないなら仕方ない
0254デフォルトの名無しさん2017/01/20(金) 22:33:30.45ID:vub4eIsV
>>249
それは本職プログラマーの発想だろうな。
事務職プログラマーは、VBAが一番いいの。
普段からエクセル使ってるから。
0255デフォルトの名無しさん2017/01/20(金) 22:47:39.08ID:RRdjAoJX
VBA使うなとは言わないけど
もうちょっとPSや.NETとの連携が楽になれば助かるね
0256デフォルトの名無しさん2017/01/20(金) 23:00:24.99ID:v0MXJAlx
VBA自体更新か新たな言語にしてほしいな
0257デフォルトの名無しさん2017/01/20(金) 23:58:46.82ID:0ryOpRhF
理想を言えば C# for Application にしてくれればとは思う
まあ VB.Net for Application でもいいけど
0258デフォルトの名無しさん2017/01/21(土) 00:17:22.31ID:O6MYDtgM
vbaが.netと楽しくできないのはmacのせいじゃね?
0259デフォルトの名無しさん2017/01/21(土) 00:37:57.62ID:7WDSmlh4
ExcelのVBAからOutlookのメール作成のツールを作っているのですが
送信先やCCやタイトルや本文は書くことができました。
しかし本文のある部分を好きな色にしたり好きなフォントにしたり好きなサイズにしたりハイパーリンクをつけたいんです。
そのためにはどうすればいいでしょうか?
0260デフォルトの名無しさん2017/01/21(土) 08:04:31.56ID:6NvQGvfC
>>244-245
2chのバグだろう

書き込み確認画面が出る際、" を使うと、そこで文字列の終了とみなされる。
" の代わりに、\" とエスケープすれば、どうだろう?

それか、書き込み確認画面が出たら、1度キャンセルすれば、確認画面は出ないようになった
0261デフォルトの名無しさん2017/01/21(土) 09:24:23.74ID:W/Qp5igc
>>244
↓のサイトを参考にして作ってみたら?
http://outofmem.tumblr.com/post/63355773212/vbavbaでjsonをパースする

ざっくり 作って見たけど なんとかなりそうよ
学校の課題らしいからこの辺で
では
0262デフォルトの名無しさん2017/01/21(土) 10:17:45.16ID:W/zpHkC+
Jsonは構造がシンプルだからパーサー書くのも難しくない
学生なら勉強として書いてみる価値はある
0263デフォルトの名無しさん2017/01/21(土) 11:18:37.44ID:1cIKmUbZ
>>259
HTML でやるならここのサンプル
https://msdn.microsoft.com/ja-jp/library/office/ff869979.aspx

リッチテキストでやるならフォーマットを RTF に設定して RTFBody に設定すればいい
https://msdn.microsoft.com/ja-jp/library/office/ff867828.aspx
0264デフォルトの名無しさん2017/01/21(土) 11:23:47.66ID:7WDSmlh4
>>263
ありがとうザマス。
やってみるでガンス。
0265デフォルトの名無しさん2017/01/21(土) 11:27:24.97ID:7WDSmlh4
あとこれも頻繁に使う予定ですが
Outlookのカレンダー(おそらく型はolAppointmentItemでしょう)の本文でも
本文のある部分を好きな色にしたり好きなフォントにしたり好きなサイズにしたりハイパーリンクをつけるにはどうすればいいでしょう?
ちょっと調べるとBodyFormatプロパティやHTMLBodyプロパティはなさそうですが。
0266デフォルトの名無しさん2017/01/21(土) 11:44:27.71ID:1cIKmUbZ
>>265
HTMLBody はないけど RTFBody はあるよ
https://msdn.microsoft.com/ja-jp/library/office/ff861303.aspx
0267デフォルトの名無しさん2017/01/21(土) 12:01:08.22ID:7WDSmlh4
>>266
わたしのOffice2007のバージョンのOutlookにはRTFBodyプロパティは無いようなのですが。
http://www.dotup.org/uploda/www.dotup.org1130546.png

でもOffice2007でもカレンダーの本文のある部分に手動で装飾ができるのでマクロでもできるはずだと思います。
どうすればいいのでしょうか?
0268デフォルトの名無しさん2017/01/21(土) 13:22:18.60ID:JwMYXArD
どっちかというと.NETがおかしいんだけどね
全部用意してやるからActiveXやWin32APIを使うなと言わんばかりの不便さ
言語の内部にない機能を外から持ってくるからオープン系と言うんだと思ってたけど
0269デフォルトの名無しさん2017/01/21(土) 13:57:11.70ID:1cIKmUbZ
>>267
う〜ん、ないなら無理っぽいかと
> でもOffice2007でもカレンダーの本文のある部分に手動で装飾ができるのでマクロでもできるはずだと思います。
アプリの機能の全てをマクロでサポートしてるとは限らんし...
■ このスレッドは過去ログ倉庫に格納されています