VBAなんでも質問スレ Part2 [転載禁止]©2ch.net

1デフォルトの名無しさん2015/05/21(木) 10:52:44.71ID:KLv0vQmm
VBAを使った質問ならなんでもござれ
本来の対象であるオフィスアプリを操作する以外の話もOK

ゲーム作り、Webアクセス、外部アプリの操作
COM(ActiveX)、Win32API、.NET Framework、DirectXなどなど
VBAで実行するものであればなんでも質問してください

VBAを開発環境としていろいろ作っちゃいましょう

前スレ

VBAなんでも質問スレ
http://peace.2ch.net/test/read.cgi/tech/1342087380/

関連スレ

Excel VBA 質問スレ Part36 [転載禁止]©2ch.net
http://peace.2ch.net/test/read.cgi/tech/1419718732/

Access VBA 質問スレ Part1
http://peace.2ch.net/test/read.cgi/tech/1328536426/

VBプログラマ質問スレ(Ver.6.0 まで) part64
http://peace.2ch.net/test/read.cgi/tech/1393069842/

Excel総合相談所 118 [転載禁止]©2ch.net
http://peace.2ch.net/test/read.cgi/bsoft/1430352555/

2デフォルトの名無しさん2015/05/21(木) 10:55:03.32ID:KLv0vQmm
前スレ埋まってたから立てた

3デフォルトの名無しさん2015/05/22(金) 20:11:01.96ID:HMp/+WyD
バカはレスしないでくれる?
個人の主張として批判せず、いたずらにある類として扱うのは極めて恣意的かおバカの批判にあらざる攻撃の特徴。
まあ、その軽蔑すべき発想で返した俺も反省はしてもよいが
はっきり言って精神病とバカの特徴でしかない論法でレスするなよ。
俺はバカと精神病きらいだからな。
おまえら、マジで精神病と思われる宣言的絶対主義の形而上学バカの一味は人類の公的な敵だとおもっているからな。
さしあたりお前らが馬鹿にされていることは科学的認識の健全性をそれなりに示すから喜ばしいがな。

それにしても、単なる知識を披露しあっているだけの時は頭良さそうなふりはできるが、
いよいよ自身の認識を問われる事態になるとここにいる連中、そこの浅さを露呈するやつ多すぎ
所詮、2chだな

4デフォルトの名無しさん2015/05/26(火) 09:57:20.64ID:98AIg8rM
ここまでテンプレ

5デフォルトの名無しさん2015/05/26(火) 11:15:15.08ID:IGUKy8Mq
>>3
むしろ自分が歯が立たない相手だと分かったら「精神病と馬鹿」というレッテルを相手に貼って
逃げるお前の方がヘタレだけどな

精神病で馬鹿なのはお前の方だよ

6デフォルトの名無しさん2015/05/28(木) 19:23:08.79ID:S82MiYOL
どこかわからんのでココで。
WordVBAで質問です。

あらかじめスタイルを本文内に設定しておき、
マクロで指定したスタイルが設定されている箇所を検索→
そのスタイルが指定されている場所の文章の置き換え

ということがしたいですが可能でしょうか。
スタイル名を指定して本文内を検索する、という例が見つからず困っております。

7デフォルトの名無しさん2015/06/10(水) 12:51:41.97ID:Eg5H5jgh
outlook2010でHTML形式メール本文の
Enter改行をShiftEnter改行に一括置換、
のVBAをさがしています。
下記のVBAでWordは動くのだけど、
そのままではoutlookで動かない

Sub ShiftEnterConvert()
'
' Enter改行をShiftEnter改行に変換
'
'
Selection.Find.ClearFormatting
Selection.Find.Replacement.ClearFormatting
With Selection.Find
.Text = "^13"
.Replacement.Text = "^11"
.Forward = True
.Wrap = wdFindContinue
.Format = False
.MatchCase = False
.MatchWholeWord = False
.MatchByte = False
.MatchAllWordForms = False
.MatchSoundsLike = False
.MatchWildcards = False
.MatchFuzzy = False
End With
Selection.Find.Execute Replace:=ReplaceAll

End Sub

8デフォルトの名無しさん2015/06/10(水) 12:51:59.79ID:Eg5H5jgh

9デフォルトの名無しさん2015/06/15(月) 17:19:16.55ID:pR/1zNa6
>>7
受信したメールを置換ってできないのでは?
置換したファイルをエクスポートするのですか?

10デフォルトの名無しさん2015/06/16(火) 22:15:42.00ID:x8vn2cko
すみません、受信メールではなく、作成中のメールです。
PCからガラケーに送ると、Enter改行だと無視されてしまうので、送る前にボタンを押してShiftEnter改行に変えたいのです。
リンク付きでPCの人にも送るので、HTMLメールのまま送りたいので。

11デフォルトの名無しさん2015/06/17(水) 02:45:22.84ID:WySeJcTb
>>10
リボンの編集→置換で(ワイルドカードを使用する)^13と^11を指定すればウィンドウからはできましたが、
この機能に該当するメソッドがどうにも探せないですね。
参考にされたコードはワードのものなんですけど、OUTLOOKで使うにはちょっと無理そうです。

12デフォルトの名無しさん2015/06/30(火) 10:29:12.58ID:ewTLWEfL
初心者から始め、2年ほど1人でVBA業務をしていたのですが
そろそろ引き継ぎ等も考え、コーディング規約のようなものを作成しようと考えています。
各プログラムで命名規則も違うため、統一したいのですが今ひとつ可読性の高い命名というのがわかりません。
修正前の変数宣言のコードを記載しますので、ぜひ添削していただけないでしょうか。
なお、グローバル変数宣言しているのは当時、この方法が一番良いと思ったためです。

13デフォルトの名無しさん2015/06/30(火) 10:41:30.91ID:ewTLWEfL
'ワークシート名宣言
Public Const Input_WS As String = "入力" '注文書テン
プレートのワークシート名
Public Const Setting_WS As String = "設定" '注文書設定
のワークシート名

'ワークシート[入力]のセル番地宣言
Public Const Order_No As String = "AO1" '注文書番号
Public Const Order_Title As String = "Q2" '注文書種類
Public Const Deta_Issue As String = "S5" '発行日
Public Const Company_Name As String = "B8" '外注業者名
Public Const Company_Code As String = "U8" '取引先
コード
Public Const Cash_Ratio As String = "AE14" '現金割合
Public Const Bill_Sight As String = "AO14" '手形サイト
Public Const Con_Name As String = "F14" '工事名称

Public Const Con_Add As String = "F16" '工事名称
Public Const Con_Start As String = "F17" '工期始
Public Const Con_End As String = "O17" '工期終
Public Const Con_Payment As String = "F19" '工事金額
Public Const Amount_Tax As String = "L19" '税額
Public Const Amount_Total As String = "Q19" '合計金額

'ワークシート[設定]のセル番地宣言
Public Const Set_ConName As String = "B4" '工事名称
Public Const Set_ConNo As String = "B5" '工事コード
Public Const Set_Start As String = "B7" '工期始
Public Const Set_End As String = "B8" '工期終
Public Const Set_Tax1 As String = "B10" '基本税率
Public Const Set_Tax2 As String = "B11" '変動税率

14デフォルトの名無しさん2015/06/30(火) 16:19:51.35ID:GcuTOY9X
>>13
工事をConと省略せずにconstruction_xxxと書くべきだと思うが、それよりもワークシートのセル番地を固定文字列で定義するのはまずいだろう。
一行ずらしましょう、とかするときどうするの?不自由この上ない。

15デフォルトの名無しさん2015/06/30(火) 16:46:45.95ID:ybpzKx4V
Detaが気になる・・・

16デフォルトの名無しさん2015/06/30(火) 18:04:04.25ID:RGb3IB+F
>>14
セル番地の固定文字列については改めて見るとすごくおかしいと思いました。
修正したいですが、皆さんワークシートやセル番地の定数はどのようにされているのでしょうか。
検索はするものの、なかなか見つけられず困っています。
>>15
気づきませんでした、すみませんありがとうございます。

17デフォルトの名無しさん2015/06/30(火) 19:44:23.68ID:4fqzjiG2
セル番地はセルに名前を付ける
列番号はenumにまとめる
シート名はconst
基本適当

18デフォルトの名無しさん2015/07/01(水) 22:28:04.95ID:DXkWToqb
一日20項目ほどの数値データが入力されている月報の表を
月末にデータを全て消去して、同じWS上で次月の日付、曜日
の書き込まれた新しいフォームに更新したいのですが、
マクロで実現可能でしょうか?

19デフォルトの名無しさん2015/07/01(水) 22:31:39.26ID:jU+pvdKi
手動でやれることはたいがいマクロ化できる。

20デフォルトの名無しさん2015/07/01(水) 23:04:39.40ID:DXkWToqb
やってみたけど30日までの月や31までの月などがあって
上手く行かないのです。

21デフォルトの名無しさん2015/07/01(水) 23:05:37.19ID:DXkWToqb
どこかにサンプルコードでも落ちてないでしょうか?

22デフォルトの名無しさん2015/07/02(木) 02:39:59.24ID:9jOibGQm
翌日の日付が「1」だったらコードを実行するようにしたらいいんでない?

23デフォルトの名無しさん2015/07/02(木) 11:43:59.86ID:mBr3NkR3
>>18
年と月が指定されればその月の日数は求められるよ
(月だけだとうるう年があるから2月に対応出来ない)

具体的やり方は複数あるだろうけど
例えばDateserial関数で指定月の翌月のゼロ日(ツイタチの前日)を求めれば出る

2015年7月の日数を求めたらこんな感じ

Sub Test()
Dim 年指定 As Long
Dim 月指定 As Long
Dim 日数 As Long
年指定 = 2015
月指定 = 7
日数 = Day(DateSerial(年指定, 月指定 + 1, 0))
End Sub

24デフォルトの名無しさん2015/07/02(木) 13:00:55.32ID:ww5oQ+GG
>>18
フォーム更新のタイミングは?
ファイルを開いたときに自動で更新するの?

25デフォルトの名無しさん2015/07/02(木) 14:46:01.74ID:AbwDTtrn
年月は、ボックスからプルダウンリストで指定
するだけです。ただ、指定年月の1〜月末までの日付、曜日を月報の1.2行目に縦に列記するコードが出来ないのです。

26デフォルトの名無しさん2015/07/02(木) 16:13:54.40ID:mBr3NkR3
>>25
こんなんでどう?
対象のワークシートと年、月、を引数に指定してコールすれば
対象のシートのA列に日付、B列に曜日を書き込むよ
年と月は省略可能で、省略すると当日の年・月を指定したとみなして処理を実行するよ

Sub test(sh As Worksheet, Optional ByVal yr As Long = 0, Optional ByVal mo As Long = 0)
Dim i As Long
Dim cnt As Long
If yr = 0 Or mo = 0 Then
yr = Year(Date)
mo = Month(Date)
End If
cnt = Day(DateSerial(yr, mo + 1, 0))
With sh
 .Cells.ClearContents
 .Columns(2).NumberFormatLocal = "aaa"
For i = 1 To cnt
.Cells(i, 1) = i
.Cells(i, 2) = Weekday(DateSerial(yr, mo, i))
Next i
End With
End Sub

27デフォルトの名無しさん2015/07/02(木) 19:18:37.45ID:zxCnKqA7
何とかできそうです。ありがとうございました。

28デフォルトの名無しさん2015/07/02(木) 20:29:21.19ID:Mdba4OI7
>>14
なんやわからん英語で書かれている方がよっぽど分かりずらいので、
あくまでもEXCELマクロで使用するスクリプトなのでコメントに書いている
そのコードを外人に見せるなら英語が望ましいけど、
漢字をそのまま使えばいいかと。
工事名称等は重複してるので、設定_工事名称とかになるんでしょうかねー。

セル番地の固定値を変数で持っているのが引っかかっているみたいですけど、
メンテするときはコードのメンテも込みになるでしょうから、
変数に代入して整理してるし良いのでは?
というか、そういう風にルールを敷けばいいとおもうの。

29デフォルトの名無しさん2015/07/03(金) 08:49:41.34ID:IELcwsmr
>>28
全体を一行下にずらす、とかするとき数十個ある変数を個々にメンテするの?
工事_A = "AO1" → 工事_A = "AO2"
工事_B = "AP1" → 工事_B = "AP2"
・・・

30デフォルトの名無しさん2015/07/03(金) 14:52:04.92ID:aFtg1Cyl
>>29
それでいいと思うよ
どうやろうとしてるのか知らんけど、この手の奴は分かりやすいのが一番だと思う

31デフォルトの名無しさん2015/07/03(金) 16:20:33.62ID:L435uo00
分りやすいっていうか、直接的だから理解はしやすいけど
修正が面倒で間違いも起きやすいね
レイアウト自体の変更ではなく、全体を一気に動かすなら
最初の一要素だけ絶対アドレスで指定して
あとはそこからの相対参照(要するにオフセット)にしておくというのもひとつの手だと思う
それなら1個いじれば全部まとめて直せる

32デフォルトの名無しさん2015/07/06(月) 05:20:54.03ID:UMBaWGrv
>>31
数十行にわたるコードのメンテぐらいで不満がある程度なら、
プログラム書くのは向いていないので、長いコードは書かないほうがいいと思う。
あと、ただ一つ変えれば全部まとめて直せるコードでも、
そのコードを知らない他人から見れば、結局全部見ることになると思うよ。
本当にそれでいいのかという部分も含めてテストすることになるから。
で、結局のところ別にどっちでもいいとなる。

33デフォルトの名無しさん2015/07/06(月) 08:42:45.53ID:fhp0P+BJ
>>31
項目増えて、途中に一行追加されたら似たようなことになるでしょ

34デフォルトの名無しさん2015/07/06(月) 13:55:10.74ID:henE3y4I
向き不向きに関する思い込みだな

35デフォルトの名無しさん2015/07/06(月) 17:53:09.90ID:J6N5PkHq
>>32
数十行だろうと数万行だろうと
ひとつの変更で複数の変更箇所が出てくる構造自体のほうが問題だと思うよ

>そのコードを知らない他人から見れば、結局全部見ることになる

云々はベタに一個ずつ指定していても同じ確認コストを要するわけで
適切なコメントをつけとくなりなんなりで対応しないとしょうがないんじゃないの?

>>33
いや、だから

>レイアウト自体の変更ではなく、全体を一気に動かすなら

という前提条件をつけた上での話をしてるんだけど

36デフォルトの名無しさん2015/07/06(月) 18:38:29.56ID:fhp0P+BJ
>>35
> という前提条件をつけた上での話をしてるんだけど
そう言うケースがどれだけあるんだ?
って話でしょ
滅多にないケースに対応するために分かりにくい方法をとる必要はないよね

37デフォルトの名無しさん2015/07/06(月) 21:37:27.39ID:J6N5PkHq
>>36

表の頭にあとから表題を付け加えるとかで
全体を動かすケースってのはそれなりにあると思うよ、
仕様変更で項目順の変更とか途中に項目追加とかのほうが多いだろうけど。

それに、全体をずらすってのは>>29の発案であって俺が言い出した話じゃないんで
俺はあくまで他人から与えられた前提条件で考えただけの話

38デフォルトの名無しさん2015/07/06(月) 22:43:31.22ID:fhp0P+BJ
>>37
> 仕様変更で項目順の変更とか途中に項目追加とかのほうが多いだろうけど。
普通はそうでしょ?

> 俺はあくまで他人から与えられた前提条件で考えただけの話
あまりない条件だけ考えることになんか意味があるのか?

39デフォルトの名無しさん2015/07/06(月) 23:03:55.23ID:J6N5PkHq
>>38
そっちのが多いとは言ったが、全体を動かすのもそれなりにあるって言ってるじゃん
滅多にないとかありえないとかいうほどのレアケースではないよ

40デフォルトの名無しさん2015/07/06(月) 23:42:36.40ID:QbnSMTRw
>>39
> ありえないとかいう

誰もそんなことは言ってないだろ?
お前さんも認めてるように

> 仕様変更で項目順の変更とか途中に項目追加とかのほうが多い

なら、そっちの対応を優先して設計した方がいいんじゃね?

って話

41デフォルトの名無しさん2015/07/06(月) 23:52:37.58ID:UMBaWGrv
>>37
別にセルのアドレスを固定で持ってようが、一つのアドレスに対して
相対で持ってようがどっちでもいいだろ
ケースバイケースで使い分けようとは思わないのか?

俺が言ったのは数十個(行)程度の修正から避けるために
相対座標で組んだ方が良いと思っているならプログラム組むのは
向いてないってことだよ
だから、お前は長いソースを組むような仕事は向いてないよって言ったんだよ。
せいぜい短く済むようなのを探しとけw

分かりやすいソースのほうが、修正工程の見積もりだって立てやすい
お前のいう相対座標は、その一つの絶対座標に対して成り立っているんだから
見出しが追加されてずれる程度ならいいが、途中の箇所に複数追加変更されたら
むしろ修正面倒なんじゃね?
数万も入力させるセルがあるなんてシートの設計のがおかしいと思うが
数万のセルがあちらこちら変更になるのなら簡単で見やすい定義を切っている
ほうが引き継ぎもしやすいし、修正もしやすいってわからんのか?

42デフォルトの名無しさん2015/07/07(火) 05:36:44.07ID:PlDHyacp
>>40
ああ、ごめん
「ありえない」じゃなくて「あまりない」だったか
どっちにせよレアケースではないのでそこが重要とは思わんけど

>>41
おれも「ひとつの手」だといってますよね?
ということはそれが絶対ということではないですよ。

まぁ、全部直値で指定する場合の変更コストとOffsetで記述した場合の変更コストが
それほど変わるとも思えませんが。

>>29のっぽい例で言えば
工事_A = "AO1" → 工事_A = "AO2"
工事_B = "AP1" → 工事_B = "AP2"
工事_C = "AQ1" → 工事_C = "AQ2"
・・・

というのが

工事_A = "AO1" → 工事_A = "AO2"
工事_B = Range(工事_A).Offset(0,1) → 工事_B = Range(工事_A).Offset(1,1)
工事_C = Range(工事_A).Offset(0,2) → 工事_C = Range(工事_A).Offset(1,2)
・・・

になる程度の話でしょ?

んでもって、何もわからない誰かに保守を引き継ぐのであれば表のレイアウトについてはコメントに書いておくべき物じゃないですかね?

後任の人があらかじめ何の予備知識もないなら全部の要素を直接指定しているのかそうでないか自体、
少なくともコードを全部読まなきゃ判断できないわけで、それなら相対指定で書いてもおなじことです。

43デフォルトの名無しさん2015/07/07(火) 05:42:25.10ID:PlDHyacp
やべ、工事_AだけRangeで指定してなかったし、全体をずらすだけなら
工事_B以降には変更ないわ

工事_A = Range("AO1") → 工事_A = Range("AO2")
工事_B = Range(工事_A).Offset(0,1) → 工事_B = Range(工事_A).Offset(0,1)
工事_C = Range(工事_A).Offset(0,2) → 工事_C = Range(工事_A).Offset(0,2)
・・・

44デフォルトの名無しさん2015/07/07(火) 05:48:03.16ID:PlDHyacp
さらに間違ってた
工事_AがRange型ならそれ以降にRange(工事_A)なんて書く必要なかった

まぁ、何も知らずにコードを読んで表のレイアウトを理解できるかどうかとか
表の変更にかかるコストとかには大して影響ない話だけど

45デフォルトの名無しさん2015/07/07(火) 07:47:40.19ID:yxtOW/kO
>>42
> どっちにせよレアケースではない

いや、レアケースかどうかじゃなくて

> 仕様変更で項目順の変更とか途中に項目追加とか

と比較しての話なんだが...
ひょっとして論理的な思考ができない人なの?

> 少なくともコードを全部読まなきゃ判断できないわけで、それなら相対指定で書いてもおなじことです。

セルアドレスなら一目でどこを指してるのかわかるけど、Offset( ) だとちょっと面倒でしょ?
そもそも、自分で間違えてるようじゃ説得力 0 だしね w

46デフォルトの名無しさん2015/07/07(火) 08:33:01.57ID:PlDHyacp
>>45
とにかく、コストがさほど変わらん以上、そういうことは重要ではないよね、
って言ってるんだけどそれが論理的に理解できない人なの?

んで、Offsetで(R1C1形式で)書くのがいやなら
RangeでA1形式で書けばいいじゃん
そんなの瑣末なことでしょ

あと、間違えたのは夜中にトイレで起きたときに書き込んだからで
たぶんあのときだとどっちで書いても間違えてる
(普段からR1C1形式で書くのでどっちかってーと俺はA1形式のほうが間違える)

47デフォルトの名無しさん2015/07/07(火) 08:34:48.94ID:xJTxnmtV
相対座標がどうたらというのは>>31が言い出したことにすぎないし、"AY0"とかいう文字列で指定すること自体がけしからんという意見。

48デフォルトの名無しさん2015/07/07(火) 12:53:11.67ID:yxtOW/kO
>>46
> とにかく、コストがさほど変わらん以上、そういうことは重要ではないよね

どう書いてもたいして変わらんから、ごちゃごちゃ言い出した >>29 とか >>31 がバカと言う主張なら納得

> RangeでA1形式で書けばいいじゃん

そう言う問題じゃない
Range("E3").Range("G4")
ってどこ?
ってすぐわからんでしょって話

まあ君にとってはどうでもいい話だったな w

49デフォルトの名無しさん2015/07/07(火) 13:20:08.70ID:PlDHyacp
>>48
全体を動かす際のコストは明らかに相対参照のほうが上で、
レイアウト変更ならどっちもどっち、って話だよ。

俺個人としては表の各要素の絶対座標よりも表のレイアウト内での相対位置のほうが
重要だと思うんで可読性は相対表記のほうが上だと思う。
もちろん、range("E3").Range("G4")とは書かないよ
だからこそのOffset表記なんであって
仮に書くなら
工事_A = Range("G4")
工事_B = 工事_A.Offset(0,1)
みたいに書けば表の中での位置関係が分りやすい(、と思うってだけなんだけどね)

んでさ、一々相手の人格攻撃するのは止さないか?

反論するのは難しくないけどめんどくさいし
貴方にとっても内容を論理的に言うこと以外に自説の説得力を増す手法なんてないよ

50デフォルトの名無しさん2015/07/07(火) 16:17:25.40ID:yxtOW/kO
>>49
> レイアウト変更ならどっちもどっち、って話だよ。

そんな思い込みを前提にされてもなぁ...

> 重要だと思うんで可読性は相対表記のほうが上だと思う。
> だからこそのOffset表記なんであって

応用力ないの?

> Range("E3").Range("G4")
> ってどこ?

って書いてあるんだから、レスする前に
Range("E3").Offset(3,6)

Range("K6")
のどっちが可読性が高いかとか考えないのか?

> めんどくさいし

君にはレスしないと言う自由があるよ
反論するのも苦労してるみたいだしね w

51デフォルトの名無しさん2015/07/07(火) 16:28:56.71ID:PlDHyacp
>>50
>どっちが可読性が高いかとか考えないのか?

うん、だからOffsetのほうが読みやすいよ

>レスしないという自由
は確かにあるし
君にも好き勝手な方言を垂れ流す手段(自由や権利ではない)はあるんだけど、
こうやってきちんと反論しといたほうが良さそうなんで仕方ないからそうしてる

52デフォルトの名無しさん2015/07/07(火) 16:29:56.64ID:PlDHyacp
変換ミスしちゃった
×方言
○放言

53デフォルトの名無しさん2015/07/07(火) 17:37:36.10ID:yxtOW/kO
>>51
> うん、だからOffsetのほうが読みやすいよ

へー、そうなんだー、すごいねー(棒

基準の位置と Offset の値の二個読まないといけないだけでも直書きより不利なのに、読みやすいとか笑えるわ w

あと方言とか意味不明
もう少し自分の書き込み見直した方がいいんじゃね?

54デフォルトの名無しさん2015/07/07(火) 18:35:20.15ID:PlDHyacp
>>53

絶対アドレスが必要ならそうだけど
通常は表内部のレイアウトが問題なんだから
絶対アドレスは気にする必要ないよね?

それともいちいち「何々の項目はF5だ」とか気にして作業してるの?
俺は「表の1列目は@@@の項目で、2列目は***の項目だ」みたいな捉え方はするけど
絶対アドレスが必要になったことなんてないよ

変換ミスについてはまぁ申し訳ない、だけどそれは議論の結果には影響ないと思う。

55デフォルトの名無しさん2015/07/08(水) 10:49:05.20ID:U80w5CD7
>>54
> それともいちいち「何々の項目はF5だ」とか気にして作業してるの?

いちいちそんなことをしたくないから定数で定義してるんだよ
意識するのは定数を定義するコードを書く時だけ

> 絶対アドレスが必要になったことなんてないよ

Offset( ) で書くにしても、基準のセルは絶対アドレスで指定するだろ

56デフォルトの名無しさん2015/07/08(水) 11:43:46.03ID:KchLLrX8
>>55
まだやるんかw

いや、基準のセルは俺も絶対アドレスで指定してますよね。

それ以外の部分では表の中での位置関係(表の何行目であるとか何列目であるとか)
についての情報のみが必要であって
それは基準セル(通常は左上端)からの相対位置が分ればそれで事足りると言ってるのです。
むしろ個々の要素についてまで絶対位置指定などしても可読性が下がるだけです。

まぁ、これはあくまでも普段からR1C1形式を好んで使ってる人間(つまり俺)の意見です。

この判断の優劣・良否・正誤等々については個々人の好みも有るでしょうから
どちらの考え方が優れているとかそういう視点での議論には決着がつかないと思いますけどね。

57デフォルトの名無しさん2015/07/08(水) 12:37:46.79ID:U80w5CD7
>>56
> むしろ個々の要素についてまで絶対位置指定などしても可読性が下がるだけです。

根拠もなしに下がるとか言われてもなぁ
とりあえず、
個人の感想です
って書いといた方がいいんじゃないか w

Excel マスターでない一般人は

>> 基準の位置と Offset の値の二個読まないといけないだけでも直書きより不利なのに、読みやすいとか笑えるわ w

だろ

> どちらの考え方が優れているとかそういう視点での議論には決着がつかないと思いますけどね。

はい、ループいただきましたぁ w

>>48
> どう書いてもたいして変わらんから、ごちゃごちゃ言い出した >>29 とか >>31 がバカと言う主張なら納得

58デフォルトの名無しさん2015/07/08(水) 12:51:28.44ID:5jcTfYer
ID導入されて、本当によかった

59デフォルトの名無しさん2015/07/08(水) 13:02:19.06ID:KchLLrX8
>>57
>個人の感想です
>って書いといた方がいいんじゃないか

書いてますよね?
R1C1を使い慣れてる人間の意見だって。

一般人の定義がわからないけど
俺は一般人こそ表の体裁(つまり相対位置による個々の要素の関連)には気を使うけれど
その座標なんてものには関心を持たないと思いますよ。
俺自身一般人のつもりですし。

表の修正があったときに「L列から4列ずらす」ってのと
「12列目から4列ずらす」ってののどっちが分かり易いかなんて
俺に言わせりゃ一目瞭然で後者なんですけど、
あなたの言う一般人は前者を選ぶってんでしょ?
それについての価値観云々を論じることに結論が出るのかって話です。

>どう書いても

云々についてはすでに論述済みですが
全体を動かす場合には
基準セル1ヶ所のみを絶対参照で指定するほうが明らかにすぐれていますし、
レイアウトの変更であっても
Range表記で基準位置からの相対指定を用いるというのは
あくまで表の体裁の中だけに問題を帰着できるという意味で
レイアウトを記述するための手法として間違ってないと思います。

ところで、なんだか無理筋で反論続けてるように見えるのですが大丈夫ですか?
一応、われわれの議論を第三者が読んでどう判断するか
冷静に考えたほうが良いと思いますよ。

60デフォルトの名無しさん2015/07/08(水) 14:00:10.16ID:U80w5CD7
>>59
> 書いてますよね?
> R1C1を使い慣れてる人間の意見だって。

皮肉も理解できないの?
そもそもそれはその上の

>> 根拠もなしに下がるとか言われてもなぁ

にかかってるんだけど、そこはスルーなのな w

> 表の修正があったときに「L列から4列ずらす」ってのと
> 「12列目から4列ずらす」ってののどっちが分かり易いかなんて

あのさあ、反論できずに悔しいのはわかるけど、「ずらす」なんて変更がどれだけあるんだ?
って話に戻すの?
普通は、>>13 の例だと 注文書番号 を少し左に寄せたいから AO1 から AN1 に移動させてくれって言われるんじゃね?
直書きならその部分のみを AO1 から AN1 に書き換えるだけ
で、君の方法だとどうなるわけ?
可読性がすごくいいんでしょ?
示してみてよ。

> ところで、なんだか無理筋で反論続けてるように見えるのですが大丈夫ですか?
> 一応、われわれの議論を第三者が読んでどう判断するか
> 冷静に考えたほうが良いと思いますよ。

鏡見た方がいいと思うよ w

61デフォルトの名無しさん2015/07/08(水) 15:15:33.15ID:KchLLrX8
>>

62デフォルトの名無しさん2015/07/08(水) 15:39:00.14ID:KchLLrX8
>>60

>根拠
ですから、>>59とかそれ以前の>>49とか>>54とか>>56とかは
全部根拠について書いてるんですが。
意図的なスルーですか?

>普通は、>>13 の例だと 注文書番号 を少し左に寄せたいから AO1 から AN1 に移動させてくれって言われるんじゃね?
>直書きならその部分のみを AO1 から AN1 に書き換えるだけ
>で、君の方法だとどうなるわけ?

いや、オフセット一個増やすだけでしょ

ところで、注文書番号 のAOは一番右端の列っぽいのであえてそこを選んでるんですか?

たとえばB列の外注業者名がずれたら残り全部ずれると思うんですけど。
んでもってそういった場合(一番右端の要素以外の変更の場合)、
「どこどこに@@って項目を追加するから、表を**の項目から全部右にX個ずらして」
みたいな話になるんじゃないでしょうか。
どうみたってオフセットのほうが簡単じゃないですか。

>鏡見た方がいいと思うよ
もちろん、俺は第三者を意識して書いてるので問題ないです。
貴方もそれで良いならこれ以上とくに言うべき事も有りません。


なお>>61は打ち間違えて送信しちゃいました。
たびたびスマン

63デフォルトの名無しさん2015/07/08(水) 19:21:57.08ID:U80w5CD7
>>62
> ですから、>>59とかそれ以前の>>49とか>>54とか>>56とかは
> 全部根拠について書いてるんですが。

レス番で書かれてもわからないので、該当の箇所を引用してみて

> いや、オフセット一個増やすだけでしょ

で、それが本当に AN1 を指してるのかどうやって確認するの?
可読性がいいんだから一目でわかるんだよね?
早く示してみてよ。

> ところで、注文書番号 のAOは一番右端の列っぽいのであえてそこを選んでるんですか?

一番最初の項目を選んだだけですよ

> みたいな話になるんじゃないでしょうか。

またその話?

>>37
> 仕様変更で項目順の変更とか途中に項目追加とかのほうが多いだろうけど。

って書かれてますよ。

> 貴方もそれで良いならこれ以上とくに言うべき事も有りません。

人のことをとやかく言う前に...

> なお>>61は打ち間違えて送信しちゃいました。

落・ち・着・け・よ

64デフォルトの名無しさん2015/07/08(水) 21:05:13.66ID:G6HCaUBj
それよりParamArrayが参照渡しできないのはなぜなんだせ?

65デフォルトの名無しさん2015/07/08(水) 21:21:46.83ID:KchLLrX8
>>63
>該当の箇所を引用してみて

>>俺個人としては表の各要素の絶対座標よりも表のレイアウト内での相対位置のほうが重要だと思うんで
可読性は相対表記のほうが上だと思う。

>>絶対アドレスが必要ならそうだけど通常は表内部のレイアウトが問題なんだから絶対アドレスは気にする必要ないよね?

>>表の中での位置関係(表の何行目であるとか何列目であるとか)についての情報のみが必要であって
それは基準セル(通常は左上端)からの相対位置が分ればそれで事足りると言ってるのです。

>>俺は一般人こそ表の体裁(つまり相対位置による個々の要素の関連)には気を使うけれど
その座標なんてものには関心を持たないと思いますよ。

以上、大体全部同じことの繰り返しですが、この辺が俺の主張する可読性に関する意見の根拠です。
本文長すぎるんで続きます。

66デフォルトの名無しさん2015/07/08(水) 21:22:59.14ID:KchLLrX8
>>65の続きです
ただ、ここに来て根本的な部分の食い違いを実感してるのですが、

>それが本当に AN1 を指してるのかどうやって確認するの?
>可読性がいいんだから一目でわかるんだよね?

というあなたの指摘自体が俺の考えている可読性の概念とは食い違ってます。
あなたは結局シート内でのセルの絶対位置指定やその確認でしか可読性を考えていないようで
俺は逆にそんなものにはこだわらず表のレイアウト中での位置指定という視点で可読性を捉えているわけです。

あなたのやり方は確かにあなたの言うようなシチュエーションでは有効でしょうが、
逆にここまでで俺の主張したようなシチュエーションでは可読性やメンテナンス性が劣るということになります。

たとえばこれですけど
> 仕様変更で項目順の変更とか途中に項目追加とかのほうが多いだろうけど。

途中に項目追加したらそこから先は全部ずれるでしょ?
(よほどスカスカの表なら別ですが、それなりに埋まってる表の場合にはそうならざるを得ません。)
そうするとセルアドレス全部直さなきゃならなくなります。
その場合には全部同じ変更(当該変更箇所を一律にオフセットずらす処理)
で対処できることってメンテナンスには大きなアドバンテージだと思いますよ。

まさか普通の業務ってのがスカスカの表でセル一個だけ変更する作業ばかりだなんて虫の良い事言わないですよね?
実際俺んとこじゃあこういう多数のセルを移動するような業務ばかりなんで俺にとってはそっちのほうが普通なんですよ。

>落・ち・着・け・よ

まぁ、打ち間違いとか変換ミスは良くやっちまうんでスミマセンとしか良いようないけど
重要なのは主張の論旨であってそれは読み手側にある程度の知識があれば
変換ミス程度は何がいいたいのか読解できるだろうからまぁ別にいいかなと思ってます。

67デフォルトの名無しさん2015/07/08(水) 21:45:49.65ID:t0H2tWbI
>>65
根拠頂戴って言ったら

> >>俺個人としては表の各要素の絶対座標よりも表のレイアウト内での相対位置のほうが重要だと思うんで
> 可読性は相対表記のほうが上だと思う。

〜と思うってどこが根拠なんだよ... w
単なる君の意見でしょ

>>66
帳票って見たことないの?
結構スカスカだよ
例えばこんな奴
https://garage.plus.co.jp/guide/estimate/image/egd_itm_1.gif
表の部分は元々複数出力するので VBA でループ回すから位置を変えるのは問題ない
ありがちなのは会社名とか見積もり番号の位置を変えたいとかで、他に影響することはあまりない

68デフォルトの名無しさん2015/07/08(水) 22:44:42.67ID:KchLLrX8
>>67
いや、それ言い出したらあなたの主張だって単なる個人の意見ですよ
たとえば帳票はスカスカだってのがあなたの意見なわけですが
そういうのじゃない表だってあるんですよ

ウチは科学技術系の職種でして
縦に時系列、横に計測項目(たとえば気温だったり風速だったり)で
複数の計測データをズラズラと並べるんですが
計測するパラメータが増えたり減ったりするんで表のレイアウトが変わるわけです。
そうすると一気に複数個所いじるのが当たり前になるわけです。
これってこっちの業界じゃあ結構当たり前のことで、
そういう時に絶対セル指定なんて使いづらくてやってらんないですよ。

あなたの主張が普遍的意義を持ってるならともかく、
こういう明らかな反例がある以上、
俺の根拠のみを私的意見だと言い切る資格はあなたにはないです。

69デフォルトの名無しさん2015/07/08(水) 23:06:29.04ID:u2i+4Vxj
Word VBAで [Shift+Enter] を押したとき、「Chr(11)」が入るみたいだけど、これって何なんですか?
アスキーコード一覧だとVertical Tabulation(垂直タブ)って書いてあるけど、
MSDNだと「タブ文字 (縦)。Microsoft Windows では使用できません。」って書かれててよく分からないんだけど、

Windows OSでは使わないけど、word(VBA)だと使ってる文字コードだよってこと?
wordもwindows版だから、Windowsでは使用できませんってのがよく分からないんですが・・

MSDN
ttps://msdn.microsoft.com/ja-jp/library/cc392241.aspx

アスキーコード一覧
ttp://e-words.jp/p/r-ascii.html

70デフォルトの名無しさん2015/07/08(水) 23:43:30.20ID:t0H2tWbI
>>68
> いや、それ言い出したらあなたの主張だって単なる個人の意見ですよ

残念ながら違う
例えば...

> 基準の位置と Offset の値の二個読まないといけないだけでも直書きより不利

これには事実しか書いてない
俺の意見ではない

また...

> たとえば帳票はスカスカだってのがあなたの意見なわけですが

のようにスカスカに感じるかどうかは個人差があるから、実際の例を出してる
スカスカに思うかどうかは実物を見た人が決めればいい

> そういうのじゃない表だってあるんですよ

それはあると思うが、>>13 の帳票が...

> 計測するパラメータが増えたり減ったりするんで表のレイアウトが変わるわけです。

とは全然違うことぐらいはわかるだろ?
また、どっちの帳票が世の中に多いかもわかるだろ?

あと、時系列で入力するってことは複数の行を扱うんだろ?
>>67 にも書いたけどそう言う奴は普通 VBA のループで処理するから、元々絶対アドレス云々の話じゃないと思うんだが

71デフォルトの名無しさん2015/07/09(木) 00:51:54.46ID:FZuq59n/
>>70
>これには事実しか書いてない

それ以前の前提条件として絶対アドレスを取得する必要があるかどうか
絶対アドレスでの指定が有効かどうか
といった論点が抜けてますよ。
あとわたしがスカスカに対比して問題にしてるのは
つまり他の箇所を巻き込んで移動させる必要が
生じるかどうかを区別していってるのであって
見た目がどうこうの問題ではありません。
複数個所を同時に変更するかどうかです
さすがにそのぐらいは前後の文脈から汲み取っていただかないと困ります。

どうにもご自分の土俵のみで話を進めようとしてらっしゃるようですが
どちらが多いかはともかくとして
(実際のところ世の中に技術系の業種とそうでない業種がどれぐらいの割合で存在してるかなんて知りません)
それにしたって>>36でいわれるような「滅多にないケース」というほどではないでしょうから
それについての言及はあってしかるべきです。

念のため指摘しておきますが
パラメータの増減は列方向ですしループ云々とは関係ないですよ

72デフォルトの名無しさん2015/07/09(木) 08:21:56.29ID:n0IdOdTN
>>71
> それ以前の前提条件として絶対アドレスを取得する必要があるかどうか

だから相対の方が可読性が高いと言うなら、実例と根拠を出せばいいだけのこと

> 複数個所を同時に変更するかどうかです

個々の項目の細かい位置調整っ言うのは珍しくないよ

> どうにもご自分の土俵のみで話を進めようとしてらっしゃるようですが

何回も書くけど、見積書等の帳票と君のところの Excel シートみたいなのどっちが多いと思う?

> どちらが多いかはともかくとして

重要だけど不利だからスルーするってこと? w

> (実際のところ世の中に技術系の業種とそうでない業種がどれぐらいの割合で存在してるかなんて知りません)

技術系の業種でも会社なら見積書とか納品書とかの帳票はあるんだよ

> それにしたって>>36でいわれるような「滅多にないケース」というほどではないでしょうから

そこまで言うなら、どれぐらいあるんだ?
根拠とともに示してくれよ

> 念のため指摘しておきますが
> パラメータの増減は列方向ですしループ云々とは関係ないですよ

いや、少なくとも行方向はループで処理するから元々絶対アドレスでは無理だろ
そう言う状況なら列側も相対にするのは珍しくない
ただし、今回の話とは状況が違うからあまり参考にならないって話

73デフォルトの名無しさん2015/07/09(木) 08:53:31.52ID:FZuq59n/
>>72
>重要だけど不利だからスルーするってこと? w
>そこまで言うなら、どれぐらいあるんだ?
>根拠とともに示してくれよ

何でこっちにばかり立証責任があるんでしょうか?
あなたが具体的な根拠を示してくださいよ

データ処理系の表なんて日本中の研究機関その他で当たり前に動いてますんで
この辺はどっちが多いとか少ないとか証明するのは無理だと思います
ですので俺は遠慮しときます

>いや、少なくとも行方向はループで処理するから元々絶対アドレスでは無理だろ

データの頭にヘッダってのが付いてるときにループ開始行が変動するってのも割りとよくある話なんで
そこはやはりループ無関係ですよ
てかあなたこっち系の話知らないだけじゃないですか?

>ただし、今回の話とは状況が違うからあまり参考にならないって話

「今回の話」ってのを勝手に局限されても困るんですけど。
表の位置指定について話してたのに
その中で絶対アドレス指定が有利な状況ばかりに
限定して話を進めないでもらえますか?

それが多いとか少ないとかを論拠にするのは
あなたがきちんと証明してからにしてくださいね

74デフォルトの名無しさん2015/07/09(木) 10:18:34.30ID:SLWTmnwe
>>69
> Word VBAで [Shift+Enter] を押したとき、「Chr(11)」が入るみたいだけど、これって何なんですか?

どこでShift+Enterを入力して、それがChr(11)だと確認した方法を教えて。

75デフォルトの名無しさん2015/07/09(木) 13:00:12.23ID:n0IdOdTN
>>73
> あなたが具体的な根拠を示してくださいよ

書いてあるでしょ?

>> 基準の位置と Offset の値の二個読まないといけないだけでも直書きより不利

> データ処理系の表なんて日本中の研究機関その他で当たり前に動いてますんで

うん、その研究機関とかが日本中の企業より多いといいね w

> この辺はどっちが多いとか少ないとか証明するのは無理だと思います

君には無理だろうから遠慮するのは正解

企業統計とか研究機関の数って公表されてて、ざっくり研究機関が 8,000件、会社は 280万社ぐらいと言うことぐらいは覚えていても損はないよ

> データの頭にヘッダってのが付いてるときにループ開始行が変動するってのも割りとよくある話なんで

で?
普通に組んでいたら開始行を変えるだけでしょ?

> そこはやはりループ無関係ですよ

まさかベタ書きしてるの? w

> 「今回の話」ってのを勝手に局限されても困るんですけど。

元々、>>13 の話
コメント見る限りは注文書の入力用シートの話であることぐらいは理解しようよ

76デフォルトの名無しさん2015/07/09(木) 22:32:24.92ID:UwaB1poA
>>74
wordで文章の途中でShift+Enterを入力して、
文章を全部選択した状態で、
マクロで↓みたいなのやったら置換されました。

Sub ReplaceSample()

Selection.Text = Replace(Selection.Text, Chr(11), "改行")

End Sub

77デフォルトの名無しさん2015/07/10(金) 22:10:41.04ID:dJeHHxuR
>>69
分かる人いないですか?

78デフォルトの名無しさん2015/07/10(金) 22:14:19.91ID:I8IKrBJT
>>77
その文字がいらないんなら除去すれば?

79デフォルトの名無しさん2015/07/11(土) 02:27:12.83ID:lfRSVC1W
>>77
>これって何なんですか?
WordでSHIFT+Enterを入力したときに入る文字です

>MSDNだと
そのページはVBAのページではありません
VBScriptで定数vbVerticalTabが使えないと言ってるだけです

80デフォルトの名無しさん2015/07/11(土) 02:48:34.31ID:vE1M/d3c
>>79
VBAのページでも同じこと言ってるよ

ttps://msdn.microsoft.com/JA-JP/library/office/gg278800.aspx

81デフォルトの名無しさん2015/07/11(土) 03:32:44.18ID:lfRSVC1W
>>80
英語のページだとNot usefulって書いてあるのか
使ってはいけないと言う意味での「使えません」じゃないって事だな
まあ、実際にWordで使ってるんなら使えばいいんじゃね

82デフォルトの名無しさん2015/07/11(土) 07:20:42.92ID:SvdcMd32
>>69
なんなですか?
って言われても、VT のコードって言うしかない
そのコードをどのように解釈するかはアプリケーション次第

83デフォルトの名無しさん2015/07/14(火) 15:37:53.39ID:8d4NQeRS
>>75
もうやめとけ。
そいつは長いコード書いちゃいけないって俺は言っただろ。
そのうち事故るよ。

84デフォルトの名無しさん2015/07/14(火) 20:08:07.90ID:lKDNL4b3
>>81-82
んじゃあ「Chr(11)」はタブ文字 (縦)ってことで、それ以上でもそれ以下でもないということですね。
ありがとうございました。

85デフォルトの名無しさん2015/07/27(月) 22:27:48.03ID:FZObgN+M
MSOfficeのパワーポイント2013のVBAについて、助言をお願いします。

現在、フォーマット修正用に、色々と文字列置換のVBAを作っています。

しかし、shape単位で置換を行うのですが、shape内のフォーマットが全て最初の文字のものになってしまいます。

ctrl+Hキーでできる置換のように、フォーマットを変えずに文字だけ置換する方法があれば教えて下さい。

よろしくお願いします。

86852015/07/29(水) 22:12:54.99ID:JQYDYy2G
すいません、勘違いがありました。問題なく出来ました。

87デフォルトの名無しさん2015/08/04(火) 13:20:19.14ID:Xu3GeQZL
OWCのグラフで値が空のとこを非表示にするにはどうしたらいいですか?

88デフォルトの名無しさん2015/08/18(火) 10:58:33.73ID:34FW6E1T
>>87
値が空のデータを削除したら?

89デフォルトの名無しさん2015/08/18(火) 16:30:28.51ID:1oq6H4HA
PowerPointでpptxを開いてPDFで保存するvbscriptを
書いたんですが発行中ダイアログが出てしまいます。
これを出ないようにする方法はないでしょうか?

90デフォルトの名無しさん2015/08/19(水) 17:21:07.83ID:leFwNaH1
>>89
ここVBAのスレ・・・

91デフォルトの名無しさん2015/08/19(水) 21:37:19.12ID:ojYTqzwH
VBScript≠VBA

92デフォルトの名無しさん2015/08/22(土) 05:31:09.55ID:dBcaDCdy
VBScriptのスレって池沼みたいな変なコテハンがいて関わりたくないのよね

93デフォルトの名無しさん2015/08/30(日) 22:49:46.81ID:PtUjiQ8D
>>89
試しにパワポにマクロでPDF出力を作ってみましたが
別に何も出ませんでしたよ?
Office2013ですけど。

94デフォルトの名無しさん2015/09/03(木) 18:14:14.52ID:oCFXB/C6
>>93
このソースだと出てしまいます。何か違いますでしょうか?

Option Explicit

Dim inFilePath
inFilePath = Wscript.Arguments(0)

Dim outFilePath
outFilePath = Wscript.Arguments(1)

Dim objPowerPoint
Set objPowerPoint = CreateObject("PowerPoint.Application")

dim pre
set pre = objPowerPoint.Presentations.Open(inFilePath, false, false, false)

dim wdFormatPDF
wdFormatPDF = 32
call pre.SaveAs(outFilePath, wdFormatPDF )

objPowerPoint.Quit()
Set objPowerPoint = Nothing

95デフォルトの名無しさん2015/09/03(木) 20:46:42.16ID:Hlg8Zb4Z
>>94
どうもです
こちらへ誘導したExcel総合相談所 119の171です
私パワポ持ってないんで確認できないんですけど、組み込み定数の違いってなにか関係ないですかね?

■[Tips]PowerPoint 2010 のPDF変換機能を利用して、Powerpointを起動せずにPDFに変換するVBSスクリプト
http://d.hatena.ne.jp/nagasama/20110310/1299772579

をみると
パワポのファイルフォーマットでPDFをあらわすのは"ppSaveAsPDF"(=32)で、
貴方のコード中の"wdFormatPDF"(=17)はワードのファイルフォーマットでPDFをあらわすものみたいですよ

参考までにマイクロソフトのリファレンスもどうぞ

PpSaveAsFileType 列挙 (PowerPoint)
https://msdn.microsoft.com/ja-jp/library/office/Ff746500.aspx

Wdsaveformat クラスの列挙 (Word)(機械翻訳)
https://msdn.microsoft.com/ja-jp/library/office/Ff839952.aspx

ぜんぜん見当違いだったらごめんなさい

96952015/09/04(金) 09:05:49.13ID:RG/2/qam
>>94
よくみたら組み込み定数じゃなくて変数で宣言してましたね
見当違い以前のはなしでした
本当にごめんなさい

97デフォルトの名無しさん2015/09/05(土) 19:56:12.09ID:852S1qdl
>>94
93ですけど、そのソースをコピペしてコマンドプロンプトから
実行してみましたが、家の環境(Win10)では普通にPDFできますよ?
ダイアログも出ませんでしたよ。
実行した時はスライド1枚の軽いPPTでやったのですが、
94さんは、もしかしたら結構スライド数多いPPTだから出るんですかね?

98デフォルトの名無しさん2015/09/05(土) 20:01:53.43ID:852S1qdl
出てるダイアログが再現できないので、わからないのだけれども
↓のプロパティでどうにもならないんだとしたら、諦めるしかないのかも。
Application.DisplayAlerts
ttps://msdn.microsoft.com/ja-jp/library/office/ff746503(v=office.15).aspx

99デフォルトの名無しさん2015/09/07(月) 12:54:20.03ID:NloI4YQK
>>97
スライド数は20くらいでしょうか。
>>98
試してみましたが残念ながら出てしまいました。
困りました。

100デフォルトの名無しさん2015/09/08(火) 02:01:39.32ID:m7aBfM8f
Windows10でie操作のマクロって動くのですか?
edgeは互換性あるわけでは無いですよね。
別にインストールするのですしょうか。

これでクリエイトするオブジェクトです。
CreateObject("InternetExplorer.Application")

101デフォルトの名無しさん2015/09/08(火) 12:06:16.04ID:9vjtcLlt
Windows10でもieは入っているようです
ttp://simply-assi.com/windows10ie/

なら 操作は可能でないかな?

Windows10持ってるなら テストしてみるべし
自分は Win8.1だから無理だけど

102デフォルトの名無しさん2015/09/08(火) 14:37:39.47ID:m7aBfM8f
>>101
自分も実機がないのよね。
ieが残ってるいうのは聞いてるんだけど、7や8からのアップデートでも、10のクリーンインストールでも何の設定もしないでも動くのかなと。
テストしてる人とかいないかな?

103デフォルトの名無しさん2015/09/12(土) 05:23:11.91ID:dQMUA4G2
仮想用に買った10のUSBが今日届くから環境作り次第ObjIE試してみますん

104デフォルトの名無しさん2015/10/07(水) 06:57:36.90ID:qdqRCjiZ
受ける会社大丈夫?
下記の条件が全て当てはまる会社にご注意下さい。

・IT系 in tokyo
・「社名 労基」でググると過去の2chスレが出てくる
・転職会議で2.5点

105デフォルトの名無しさん2015/10/12(月) 22:50:34.44ID:Xy8ebFp6
今、こんなグラフがあるんですが、
http://i.imgur.com/BeOZor7.png

これを↓のようにするにはどのようにしたらいいんでしょうか?
http://i.imgur.com/7gXPOFG.png

106デフォルトの名無しさん2015/10/12(月) 23:30:39.75ID:DYP6asIc
>>105
何がしたいの?
回転させたいの?

107デフォルトの名無しさん2015/10/12(月) 23:35:13.73ID:oCa7NkmO
>>105
もう既に出来ているんじゃないか?

108デフォルトの名無しさん2015/10/12(月) 23:36:26.71ID:Xy8ebFp6
>>106
縦軸と横軸を入れ替えたいのです。
画像として90度回転させたいわけではないのです。

109デフォルトの名無しさん2015/10/12(月) 23:40:07.79ID:Xy8ebFp6
>>107
>>105は1枚めの画像を左に90度回転させ2枚めの画像としています。
現在、エクセルで1枚目のようなグラフがあるのですが、
縦軸と横軸を入れ替えたような(2枚目画像のような)グラフをエクセルで作りたいのです。
自分なりにいろいろ試したのですができませんでした。

110デフォルトの名無しさん2015/10/12(月) 23:41:53.96ID:oCa7NkmO
>>108
入れ替えたグラフを既に作っているじゃないですか?それで完成しているのでは?

111デフォルトの名無しさん2015/10/13(火) 00:02:52.88ID:X9js2iKE
>>110
ああ、ごめんなさい。
>>105の2枚目の画像は1枚目の画像を画像ビューワーソフトで左回転させたものなんです。
2枚目のようなグラフをエクセルで作成したいんです。
(今は1枚目のようなグラフをエクセルで作った段階です)

112デフォルトの名無しさん2015/10/13(火) 15:10:52.88ID:v0mnZW8d
>>111
私も、できてると思うんですが?

1131052015/10/13(火) 18:10:14.52ID:X9js2iKE
改めて質問させてください。

エクセルで↓のようなグラフがあります。
http://i.imgur.com/BeOZor7.png

このグラフの縦軸と横軸を入れ替えたグラフを(エクセルで)作成したいのですがやり方がわかりません。
作成したいグラフのイメージは↓のようなものです(この画像は画像ビューワーで作成したものです)
http://i.imgur.com/7gXPOFG.png

わかりづらくてすみません。

114デフォルトの名無しさん2015/10/13(火) 18:27:38.73ID:jBFoqp2r
>>113
Excel グラフ 回転
でググるとやり方でてくるけど、これじゃ駄目?

1151052015/10/13(火) 21:52:53.15ID:X9js2iKE
>>114
今エクセルを試せる環境ではないので検索してみた結果を眺めたところ、
線グラフや面グラフの縦軸と横軸の反転は非常に難しそうな印象を受けました。
難しいというか無理やりというか。
そこまでの労力をかけないと望む結果が得られないということはなんとなくわかりました。
そうであるならば現状を受け入れるしかないのかと思っております。
今回は諦めます。ありがとうございました。

116デフォルトの名無しさん2015/10/13(火) 22:05:15.03ID:v0mnZW8d
>>115
散布図でやってみるとか?

117デフォルトの名無しさん2015/10/13(火) 23:07:15.46ID:/7qkRhU+
>>113
Excelの質問かよ…
じゃあなんでExcelの質問スレじゃなくてここで質問するんだ
後出し条件出してくんなカス

118デフォルトの名無しさん2015/10/14(水) 00:34:55.63ID:psNeOyD5
>>117
あ〜〜VBA質問スレか・・・
すいません誤爆というかなんというか全く気づかず・・・

119デフォルトの名無しさん2015/10/27(火) 14:53:17.89ID:EXphczgr
某サイトへのアクセスを1日1回、定時に行うためにIE操作を行うマクロを作っています。
必要な情報を取得した最後にそのサイトをログアウトしてIEを閉じたいのですが、ログアウトをしたときにJavascriptから?のログアウトしましたとの情報メッセージが表示されます。
ググッて調べたところ、以下の様な感じで閉じられるとあったのですが、SendMessageだけがうまくいきません。
ハンドルの値は入っています。
IE11を使っていますが、仕様が変わったのでしょうか?(Windows Updateでの最新)

このメッセージを閉じないとその後の閉じるためのVBAは進んでいるものの、実際の動作をしてくれなくて困っています。
(手動でメッセージを閉じたらその後のIEを閉じる操作が終わった状態にまで一気に進む)

わかる方いましたら教えて下さい。


Const WM_COMMAND As Long = &H111

hWnd = FindWindow("#32770", "Web ページからのメッセージ")

If hWnd <> 0 Then
Rtn = SendMessage(hWnd, WM_COMMAND, vbOK, 0)
End If

120デフォルトの名無しさん2015/10/28(水) 14:22:04.16ID:Dygk5TrA
>>119
ハンドル違うんじゃね?

1211192015/10/29(木) 03:59:21.10ID:l3n8K/Sw
>>120
値は取得できてます。
これが本当にメッセージのハンドルなのか調べ方を知らないので合ってるかは分かりません。
FindWindowも間違ってないと思うのですが、こちらも調べてみます。

122デフォルトの名無しさん2015/10/29(木) 21:40:45.69ID:Q2L1bFVS
WM_COMMANDの右2つの引数の指定の仕方が間違ってるのと
有効なウィンドウハンドルかどうかはIsWindowで取得できる

1231192015/10/30(金) 00:47:33.04ID:ZHFQ9n4z
Rtn = SendMessage(hWnd, WM_COMMAND, 2, 0)

でうまく閉じてくれました。

>>122さんレスありがとうございます。

124デフォルトの名無しさん2015/11/03(火) 17:46:00.00ID:fVYiq8DO
質問が2つあります(長文すみませんm(_ _)m

○1点目:vbaを用いた自動化でdiv要素だけのボタンを押す方法
作業->ウェブのあるサービスにログインし、一定の操作をしてからログアウトする
問題->idとpassの入力はできたが、ボタンが押せない

構造的には下記アドレスのログインフォームと似ていて
ttp://codepen.io/andrejmlinarevic/full/NGGdVv/
上記例の<button class="btn">Login</button>のような
button要素がなく、div要素のみで設計されています

javascript関係かと思い.fireEventや.Script.setTimeoutを調べてみたのですが
div要素には実行されるjavascriptやそのfunctionなどは何も無く、class名だけ書かれています

○2点目:ieオブジェクトのdocumentがローカルウインドウから参照出来ない
上の質問と関係し、ieオブジェクトのdocumentの中身を見ようとしたのですが
document以下が<変数なし>となっており参照出来ません
調べるとskydriveのadd-onを入れる、shellから持ってくる等情報がありますが、いずれでも解決出来ませんでした
なお<変数なし>とは出ていますが、debug.print ie.document.titleなどとすると中身は出力されます

環境
Windows8.1 pro 64bit
excel 2013 32bit:参照設定MS Internet Controls/MS HTML Object Library/OLE Automation
         Visual Basic For Applications/ MS Excel 15.0 Object Library/ MS office 15.0 Object Library
ie 11 64bit(32bitでも変わらず)

125デフォルトの名無しさん2015/11/03(火) 19:21:14.85ID:elW9O1dh
パワポでソフトトーク使いたいんだけど『開発』タブ出すところまではできてもVBAでマクロを記述〜っていうのができない。インポートするファイルの在り処か作成法を情弱にも理解できるように教えてほしい…

126デフォルトの名無しさん2015/11/03(火) 19:22:51.42ID:elW9O1dh
参考にしてるのはこれ。
パワポも2ちゃんも初心者でごめんなさい…
http://needtec.exblog.jp/18919344/

127デフォルトの名無しさん2015/11/03(火) 19:41:17.58ID:fVYiq8DO
>>125
Alt + F11

128デフォルトの名無しさん2015/11/04(水) 15:38:11.36ID:DjYXAcy0
127
Visual Basicのウィンドウは出てきたしテキストもコピペしたけど
wavが自分のファイルに保存されない。
マクロ実行しても何も起こらずウィンドウが閉じるだけ。パワポのファイルにも音源は見当たらない。

129デフォルトの名無しさん2015/11/04(水) 15:56:19.21ID:Y61Iie1f
>>124
1点目はソースがないとなんとも。

2点目はHTMLDocumentあたりで定義したオブジェクト(変数?)にSetしてやれば参照できるよ。
理由はしらんがie.Documentみたいなままだと参照できない。

130デフォルトの名無しさん2015/11/04(水) 21:25:56.71ID:NpxeN+NQ
>>128
何をしてどうなったのか具体的に書いてもらわないとわかりません
パワポにマクロを組み込んで、softTalkのパスを指定して
スライドのノートに文章を書いて、マクロ実行、までは出来たという理解でOK?

131デフォルトの名無しさん2015/11/04(水) 21:55:38.97ID:NpxeN+NQ
>>129
レスありがとうございます
2点目はアドバイスの通り、set objDoc = objIe.Document.allとかしたら中身読めました。ありがとうございます!

1点目は情報少なくて申し訳ないです
業務用なので詳細は一部フェイク入れますが、htmlにはinputタグがあるだけで
<input id="id" class="input-text" type="text" ime-mode="disabled"></input>
はあるのですが、idとpassを入れた後に押すボタンが
<div class="btn-control-outer">
<div class="btn-control-inner">
<div class="btn-control-message">OK</div>
</div></div>
というタグだけで作られています
(なおこのタグはjsで動的に作られているようで、IEの要素チェックで確認したものをコピペしています。ソースだとこのタグがありません)
リンク要素のように.clickが出来るものがなく、setTimeOutするにも、タグの中にjavascript:alert();のような記述も見当たりません

トップページのソースでjsを外部参照していたので、改行がないjs(minify化?)ファイルを読み解いていますが
上のdivタグとどうに関係しているのかわからず詰まっている状態です。

132デフォルトの名無しさん2015/11/05(木) 10:30:26.20ID:HwmEl5Ub
>>131

div ボタンでぐぐったらこんなサイトがあって
http://lilia-study.com/web/jquery/sample/div-button.html
ここのサンプルが言っているdivのみのボタンかと思う。
http://lilia-study.com/jquery-sample/sample1/sample.html

For Each tag In ie.Document.getElementsByTagName("div")

Next

133デフォルトの名無しさん2015/11/05(木) 10:32:32.99ID:HwmEl5Ub
途中だった

For Each tag In ie.Document.getElementsByTagName("div")
if tag.ID = "aaa" Then
tag.Click
end if
Next

でクリックできた。
そちらのサイトでも動くんでないか?

134デフォルトの名無しさん2015/11/05(木) 21:56:35.78ID:CDrat58l
パワーポイントで、すべてのシートについて青い文字だけを黒い文字に変換するようなマクロを
作っていただけないでしょうか。

135デフォルトの名無しさん2015/11/05(木) 23:31:33.31ID:5frd9spB
>>132
アドバイスいただいた方法で出来ました!
div要素をclick出来るとは思っておりませんでした。
本当にありがとうございます。

その後の処理も上で>>119さんのやりとりから調べて目的とする動作が出来ました
合わせて感謝します。

136デフォルトの名無しさん2015/11/05(木) 23:51:53.10ID:HwmEl5Ub
>>135
こちらもdivがボタンにできるのを初めて知ったので勉強になったよ。
ちなみに119もオレw

1371242015/11/06(金) 07:09:49.59ID:I5IXDGW5
!Σ(・ω・ノ)ノ
お礼伝わり良かったですw

138デフォルトの名無しさん2015/11/08(日) 22:46:51.63ID:yp780VFR
access2013でフォームからの入力期間の金額を集計してレポート作成をしようとしています。
vbaでレポートボタンを押下した動作と同じコードは存在しますでしょうか。

139デフォルトの名無しさん2015/11/09(月) 00:38:10.22ID:lpQ26d6h
レポートボタンってのが何の事かわからんが DoCmd.OpenReport使えとかそういう事か?

とりあえずACCESS VBAはそれ用のスレがあるからそっちで聞け

140デフォルトの名無しさん2015/11/09(月) 02:05:47.54ID:rGXYqJ1u
>>134
すべてのシートの、
すべてのテキストの文字色を、一つずつ調べていき、
(または、1文字ずつ調べながら、)

もしそれが青なら、黒に変更する

141デフォルトの名無しさん2016/02/17(水) 15:13:29.51ID:cyifogYg
パワポのVBAでお願いします。
ファイル→情報→メディアの圧縮
わVBAからやりたいのですがどのオブジェクトのどのメソッドからやればいいのかわかる方いたら教えて下さい。

音声ファイルの圧縮がやりたいのです。

142デフォルトの名無しさん2016/02/24(水) 21:04:30.98ID:faCUrUaa
141507
140712
140715
141512
141207
141215
140708
140709
141508
140807
140703
141509
140815
141503
141208
140907
140315
141209
140915
141203

競馬の三連単の買い目がこのようにある時、マークシート記入枚数を減らすために
14-7,12,15-3,7,8,9,12,15
14-8,9-7,15
140315
とまとめたいのですが、どのように処理すればよいでしょうか?
いずれは金額も考慮したいと考えていますが、現段階では難易度を下げるために同一金額としてください。
同じ理由でここでは頭を固定で例を作成させていただきました。

よろしくお願いします。

143デフォルトの名無しさん2016/02/24(水) 22:34:57.70ID:7wWguvAi
>>142
VBA関係ないじゃん
書き込むスレ間違ってるよ

144デフォルトの名無しさん2016/02/24(水) 22:39:06.06ID:faCUrUaa
>>143
他にそれらしいスレがみつからなかったことと、この買い目を出す処理をVBAで行っているのでここで聞いたのですが
適切なスレがありましたら移動しますので、誘導願います

145デフォルトの名無しさん2016/02/24(水) 23:05:03.48ID:7wWguvAi
>>144
ごめん、>>1 読む限りだとこのスレで問題なさそうね…
すまんかった

146デフォルトの名無しさん2016/02/24(水) 23:07:19.07ID:gEXn5/E8
でもEXCEL VBAに行ったほういい気がする
どうせEXCELだろ

147デフォルトの名無しさん2016/02/25(木) 00:31:32.38ID:lxjkiQUf
>>142
そういうのはアルゴリズム系スレの方が受けがいいかと
あんま言語関係ないし
データ構造,アルゴリズム,デザインパターン総合スレ 2
http://peace.2ch.net/test/read.cgi/tech/1362301811/

1481422016/02/27(土) 08:28:02.19ID:SRIIhbK2
>>147
了解

149デフォルトの名無しさん2016/03/07(月) 19:56:57.79ID:IDkrJnKk
ミリ秒より短い時間の計測ってどうやるの?

150デフォルトの名無しさん2016/03/07(月) 20:49:02.27ID:UbdDFkp+
>>149
何を計測したいの?

151デフォルトの名無しさん2016/03/09(水) 17:27:24.27ID:ISN2ur/+
というかVBA マイクロ秒でぐぐったりしたの?

152デフォルトの名無しさん2016/03/18(金) 00:50:59.88ID:QavJ4QpP
EXCELのVBAでインデントされたとりあえず下のようなXMLを作成したく
http://blogs.yahoo.co.jp/ke1_thanks/folder/929993.html?m=lc
を参考に作成してるのですが、うまく孫要素が作成できません。
どうすれば孫要素が作成できるのでしょうか。ご教示お願いします。
また何と調べればいいのかを教えていただければ幸いです。

環境 windows7  64bit と32bit両方
 Excel 2010 64bit と32bit 両方

作成したいXML(括弧は半角だとうまく書き込めないみたいなので全角にしてます)


<?xml version="1.0" encoding="UTF-16" standalone="yes"?>
<ROOT>
<TITTLE>DQ5</TITTLE>
<CHARACTER>
<PERSON>
<NAME>パパス</NAME>
<HOBBY>女装</HOBBY>
<COMMENT>ぬわーーっっ!!</COMMENT>
</PERSON>
<PERSON>
<NAME>ゲマ</NAME>
<HOBBY>メラミ</HOBBY>
<COMMENT>ほっほっほっほっ。子を思う親の気持ちは いつみても いいものですね。</COMMENT>

</PERSON>
</CHARACTER>
</ROOT>

153デフォルトの名無しさん2016/03/18(金) 01:48:30.33ID:emFx7ejn
>>152
vba xml 生成 とかでググるといくらでもやり方はヒットすると思うけど
具体的にどんなコードのどこで行き詰まってるのか書いてくれないとアドバイスしようがない

154デフォルトの名無しさん2016/03/18(金) 11:47:02.11ID:QavJ4QpP
<CHARACTER>が</CHARACTER>で作成されてしまい、閉じてくれません。また<PERSON>などが孫要素になってくれません。
コードはこんな感じです。
http://pastebin.com/CVVKVnYF


作成されるXMLは↓です。
<?xml version="1.0" encoding="UTF-16" standalone="yes"?>
<ROOT>
<TITTLE>DQ5</TITTLE>
<CHARACTER/>
<PERSON/>
<NAME>パパス</NAME>
<HOBBY>女装</HOBBY>
<COMMENT>ぬわーーっっ!!</COMMENT>
<PERSON/>
<NAME>ゲマ</NAME>
<HOBBY>メラミ</HOBBY>
<COMMENT>ほっほっほっほっ。子を思う親の気持ちは いつみても いいものですね。</COMMENT>
</ROOT>

155デフォルトの名無しさん2016/03/18(金) 21:10:32.76ID:Sdu3bujA
>>154
> 'ノードとして子ども・孫の要素を追加
>Set elem2 = rootelem.appendChild(myxml.createElement("CHARACTER"))
> Set elem2 = rootelem.appendChild(myxml.createElement("PERSON"))

> 'ノードとしてひ孫の要素を追加
>Set node = rootelem.appendChild(myxml.createNode("element", "NAME", ""))
> node.Text = "パパス"

rootelemにしか子供追加してないから、孫、ひ孫が生成されないのは当然な気がする
追加した子要素に子供を追加してやらなくちゃ…
試してないけどこんな感じ?

'ノードとして子ども・孫の要素を追加
Set elem2 = rootelem.appendChild(myxml.createElement("CHARACTER"))
Set elem2 = elem2.appendChild(myxml.createElement("PERSON"))

'ノードとしてひ孫の要素を追加
Set node = elem2.appendChild(myxml.createNode("element", "NAME", ""))
node.Text = "パパス"

156デフォルトの名無しさん2016/03/19(土) 11:15:23.76ID:LxdobWB2
ThisWorkbook.Save
で「指定したディメンションは、このグラフの種類では無効です。」のエラー発生。
エラーが出るときと出ないときがある。

VBAでグラフを操作している部分もあるが、それとは無関係と思われるSaveでこのエラーに戸惑っています。

↓このサイトで、SaveAsで存在しないパスを指定し同様のエラーが出た事例は見つかりましたが私はパス指定していません。
http://yaplog.jp/purplish-blog/archive/1838

エラー回避する方法を教えて下さい。

1571562016/03/19(土) 11:26:07.75ID:LxdobWB2
>>156はエクセルの話です
win7, office2010

158デフォルトの名無しさん2016/03/20(日) 06:56:26.93ID:XolQD74Z
どなたか>>156わかりませんか?

159デフォルトの名無しさん2016/03/20(日) 07:11:36.75ID:P5LbtOo8
VBA内でセル指定をするときにシート名を明記しないと
そのセルがアクティブシートのセルになってしまってエラーが出ることがあるけど

VBAでグラフを作成するプログラムを作成していますが、エラーがでます。エラーの... - Yahoo!知恵袋
http://detail.chiebukuro.yahoo.co.jp/qa/question_detail/q1486687089

ぷぎえもん日記 VBA:実行時エラー1004グラフを作る時のエラーについて
http://pugiemonn.blog6.fc2.com/?m&no=985

その辺は大丈夫?

160デフォルトの名無しさん2016/03/20(日) 14:30:13.47ID:U/mbzow+
>>155
うまく行き作りたいものが作れました。ありがとうございます。

161デフォルトの名無しさん2016/03/21(月) 00:33:38.32ID:RmxeJW4x
>>159
レスありがとうございます。
今出先なので明日帰宅してから確認してみます。

162デフォルトの名無しさん2016/03/21(月) 00:35:10.70ID:RmxeJW4x
あ、書き込めた。規制かかっててレスできず申し訳ないです。

163デフォルトの名無しさん2016/03/24(木) 09:23:12.55ID:Y45L/A5m
既存のブックに入れているマクロは正常動作しているんだけど、2,3日以前から作った
ブックは
オートメーションエラーです。
例外が発生しました。

ってエラーですぐ落ちてしまうんだけど、これって何が原因なんですかね。
(OS Win7Home excel2010)

なんせ、
Sub test()
MsgBox "test"
End Sub
ってだけのでも同じエラーで落ちてしまうんで┐(´∀`)┌
ちなみにウィルス対策はAVGでチェックかけて異常なしではありました

http://www.dotup.org/uploda/www.dotup.org790841.jpg

164デフォルトの名無しさん2016/03/24(木) 12:50:23.33ID:FJvNCHp3
>>156
「vba 指定したディメンションは、このグラフの種類では無効です。」で検索!

>>163
「vba オートメーションエラー」で検索!

165デフォルトの名無しさん2016/04/09(土) 01:33:44.74ID:8VJ1WNjN
Declare 文でDllを指定するとき、絶対パスを指定するのとしないので挙動が変わるなんてことありますかね?

パスの通ったフォルダにDllを置きDeclare文にはパスを書かない、という状態で何度テストしても失敗する(結果がおかしい)ので、
もしやと思って絶対パスを指定してみたら成功しました。何度やっても同じです。

念のため他のフォルダに同名のDllがないか確認しましたが、そんなものはありませんでした。

Window7、Excel2010(64bit)です。

166kio2016/04/09(土) 09:27:26.96ID:OaMx2gZN
下記プログラムでデータ貼り付け可能ですが、
Range(

167デフォルトの名無しさん2016/04/09(土) 10:55:02.62ID:uD9Ltjj7
>>165
なんで大事な部分を書かずに濁すの?

168デフォルトの名無しさん2016/04/09(土) 11:27:25.80ID:mXQNErhc
>>167
大事な部分って?

169デフォルトの名無しさん2016/04/09(土) 11:49:50.63ID:8+AE4+J9
コードじゃね?

170デフォルトの名無しさん2016/04/09(土) 12:00:42.12ID:YC7vrxdl
どんな dll 使って、
どう失敗するのか

とかじゃね?

171デフォルトの名無しさん2016/04/09(土) 12:35:11.85ID:lZD29UWG
性別と容姿じゃね?

172デフォルトの名無しさん2016/04/09(土) 15:25:31.33ID:8VJ1WNjN
>>167-170

DLLはこんな感じで
Declare PtrSafe Function funcABC Lib "ABC.dll" (ByVal n As Long, ByRef v As Variant) As Long

本来1が返ってくるべきところに0が返ってくるんです。
だけど、〜 Lib "C:\tmp\ABC.dll" 〜 とすると、ちゃんと1が返ってくる。

どちらの場合もDLL名を変えると「ファイルが見つかりません」という実行時エラーになるので、同じDLLファイルを
指しいてるのは間違いないと思います。

173デフォルトの名無しさん2016/04/09(土) 16:35:57.82ID:kbPPFUQM
>>172
そんなの "ABC.dll" の作り次第だろ
作者に聞けよ
dll のパス取得して何かしてるのかもしれないし
http://frog.raindrop.jp/knowledge/archives/000316.html

174デフォルトの名無しさん2016/04/09(土) 16:55:41.43ID:DA1syyI4
>念のため他のフォルダに同名のDllがないか確認しましたが、そんなものはありませんでした。
限りなくこれが怪しいと思うんだが

175デフォルトの名無しさん2016/04/09(土) 16:57:28.60ID:XGWfr4Pw
>>165
同名のdllが無いことをどうやって確認した?

176デフォルトの名無しさん2016/04/09(土) 18:20:08.40ID:uD9Ltjj7
>>165
挙動が変わることはあります。
おわり

177デフォルトの名無しさん2016/04/09(土) 18:32:34.00ID:8VJ1WNjN
>>175
パスが通っている全フォルダとカレントフォルダからの目視です。

環境変数(PATH)をまず確認して、
kernel32.dllにあるAPI 「GetEnvironmentVariableA」 に引数"PATH"を渡して出てきたフォルダを対象にしました。

問題のfuncABC も GetEnvironmentVariableA も同じVBAから発行しています。

178デフォルトの名無しさん2016/04/09(土) 18:41:03.58ID:DA1syyI4
カレントフォルダをどうやって確認したかとか
システムディレクトリにdllがないかとか

まあ、確認漏れ自体はいっぱいありそうだな

179デフォルトの名無しさん2016/04/09(土) 18:46:44.36ID:8VJ1WNjN
>>178
C:\windowsやC:\Program Files、C:\Program Files (x86)は入ってますよ。
目視も検索フィルタにとりあえず *.dll で全DLLを出してからやっています。

>>176
マジですか...

180デフォルトの名無しさん2016/04/09(土) 19:45:00.69ID:mXQNErhc
>>179
本当にひとつしかないならあり得ない挙動だと思うけど。
dllの内容を明かしてみな。

181デフォルトの名無しさん2016/04/09(土) 19:57:07.07ID:zSVIlalC
Windows が使用する DLL 検索パス

1.実行中のプロセスの実行形式モジュールがあるフォルダー。
2.現在のフォルダー。
3.Windows システム フォルダー。このフォルダーへのパスは、GetSystemDirectory 関数が取得します。
4.Windows ディレクトリ。このフォルダーへのパスは、GetWindowsDirectory 関数が取得します。
5.環境変数 PATH 内に記述されたフォルダー。

https://msdn.microsoft.com/ja-jp/library/7d83bc18.aspx

182デフォルトの名無しさん2016/04/09(土) 20:29:56.83ID:XGWfr4Pw
>>177
ウインドウズの検索機能を使ってみたら?

183デフォルトの名無しさん2016/04/09(土) 20:38:17.27ID:KOaWU5bX
何か仕事でもしながら、ディスク全部の範囲で、検索すればいい

184デフォルトの名無しさん2016/04/09(土) 21:28:53.86ID:yIzAT5uL
windows なら黙って search everything 入れろ
考える余地なし

185デフォルトの名無しさん2016/04/09(土) 21:30:12.16ID:yIzAT5uL
あ、業務用のマシンだとマズいか

186デフォルトの名無しさん2016/04/09(土) 21:43:59.08ID:YC7vrxdl
>>179
> 目視も検索フィルタにとりあえず *.dll で全DLLを出してからやっています。
プログラマーに向いてないんじゃね?
コマンドプロンプトで
dir /s /b \ABC.dll
ってやればいいだけだろ

187デフォルトの名無しさん2016/04/09(土) 23:15:48.61ID:8VJ1WNjN
>>180
ODBCのコネクションを張る関数で、特に自分の場所が関係する処理はしてないですね。

>>181-186
全ドライブを検索した結果(search everythingは入れてませんが dir/s はやってみた)
C:\Users\*****\Google ドライブ\
に見つかりました。
しかし、これを消しても現象は変わらなかった(もともと参照パスに入ってない)ので、諦めの気分です。

188デフォルトの名無しさん2016/04/10(日) 00:12:20.49ID:TaPFtU7E
元々の質問は、挙動が変わることがあるか?で、
あるって回答で解決だと思うけど、どうしてもないってことにしたいの?
ゴールが見えないよ

1891872016/04/10(日) 00:39:39.00ID:9vV3r8su
>>188
あるって回答(>>176)もあり、ないって回答(>>180)もありで、判断がつかない状況です。

1901872016/04/10(日) 00:47:04.09ID:9vV3r8su
それと、>>173>>176もいまいち理解できておりません。
「dllのパスを取得」とは、実際の存在はひとつでもDeclare文での指定のしかたまでも検知できるんでしょうか?

191デフォルトの名無しさん2016/04/10(日) 01:04:43.27ID:9zYVMe1H
まさか、パス・ユーザー名など、システムに関係する部分に、
日本語を使ってないだろうな?

それで、バグってるとか?

1921872016/04/10(日) 01:08:14.87ID:9vV3r8su
>>191
ないですね

193デフォルトの名無しさん2016/04/10(日) 01:14:27.05ID:9zYVMe1H
そのDLLの作者が外人で、DLL内で、パス・ユーザー名を扱っていた場合、

もしその中に日本語が入っていれば、バグるかも

194デフォルトの名無しさん2016/04/10(日) 01:22:30.64ID:9zYVMe1H
>>187
>ODBCのコネクションを張る関数で

それなら、そのDBのメーカーが(ドライバーが)、絶対パスしか許可していないのかも。
相対パスの危険性も考慮して、そういうアクセス許可にしているのかも

絶対パスを使えばいい

195デフォルトの名無しさん2016/04/10(日) 05:47:22.16ID:v52RcnsN
>>187
> 特に自分の場所が関係する処理はしてないですね。
ん?
自分で作った dll なの?
だったら自分でデバッグしなよ

196デフォルトの名無しさん2016/04/10(日) 10:59:47.17ID:KR5BT3Be
全ドライブを検査してひとつしかdllファイルがなかったって言ってるんだろ。
それが本当なら何も対処できないよ。OSレベルの不具合。

197デフォルトの名無しさん2016/04/10(日) 17:49:12.01ID:r0zhudqC
VBAをコーディングするのに最適な画面サイズとモニターの台数は何台ですか?
縦と横どっちでつかってすか?
4Kディスプレイはどうですか?

198デフォルトの名無しさん2016/04/10(日) 18:54:26.34ID:oV0tVvW7
(´・ω・`)

199デフォルトの名無しさん2016/04/10(日) 19:33:25.31ID:Y5yf6QHK
>>197
3台

4Kいいよ

200デフォルトの名無しさん2016/04/27(水) 21:49:20.13ID:Wsz3hpAs
エクセルのVBA質問があります。
一番前のTOTALシートのA22:H26までを複数シート(20シートくらいある)の最終行の次の行に貼り付けたいのです。
各シートの最終行はバラバラで多いのは数千とあります。
しかも、G列には\と$の通貨マークH列には金額が書いてあり、SUMIFが組んであります。
記録マクロでやると下記みたいになりますが、こんなこと可能なのでしょうか?
調べても出てこないので誰か教えてください。

Sub Macro2()
Rows("24:28").Select
Selection.Copy
Sheets("A").Select
Rows("22:22").Select
Selection.Insert Shift:=xlDown
Range("H22").Select
Application.CutCopyMode = False
ActiveCell.FormulaR1C1 = "=SUMIF(R9C7:R19C7,RC[-1],R9C8:R19C8)"
Range("H23").Select
End Sub

201デフォルトの名無しさん2016/04/28(木) 00:18:56.90ID:Vq22azhO
>>200
可能です

202デフォルトの名無しさん2016/04/28(木) 07:31:01.70ID:TNqjmghT
>>201
教えてください。

203デフォルトの名無しさん2016/04/28(木) 08:26:47.90ID:RqXO/zBw
>>202
具体的にあなたが躓いているところがわかりません

204デフォルトの名無しさん2016/04/28(木) 12:27:24.37ID:xB9gNSEq
>>203
具体的にあなたが何がわからないのかわかりません

205デフォルトの名無しさん2016/04/28(木) 12:29:10.17ID:gq5pmM2C
>>200
For Eachで全シートループして、各シート最終行取得して貼り付ければ良いと思いますが、ダメですか?

206デフォルトの名無しさん2016/04/28(木) 20:07:58.00ID:iqsXmWMg
>>200ですが、出直してきます。

207デフォルトの名無しさん2016/05/01(日) 15:15:56.13ID:tKi6j9CT
匿名通信(Tor、i2p等)ができるファイル共有ソフトBitComet(ビットコメット)みたいな、
BitTorrentがオープンソースで開発されています

言語は何でも大丈夫だそうなので、P2P書きたい!って人居ませんか?

Covenantの作者(Lyrise)がそういう人と話したいそうなので、よろしければツイートお願いします
https://twitter.com/Lyrise_al

ちなみにオイラはCovenantの完成が待ち遠しいプログラミングできないアスペルガーw


The Covenant Project
概要

Covenantは、純粋P2Pのファイル共有ソフトです

目的

インターネットにおける権力による抑圧を排除することが最終的な目標です。 そのためにCovenantでは、中央に依存しない、高効率で検索能力の高いファイル共有の機能をユーザーに提供します

特徴

Covenant = Bittorrent + Abstract Network + DHT + (Search = WoT + PoW)

接続は抽象化されているので、I2P, Tor, TCP, Proxy, その他を利用可能です
DHTにはKademlia + コネクションプールを使用します
UPnPによってポートを解放することができますが、Port0でも利用可能です(接続数は少なくなります)
検索リクエスト、アップロード、ダウンロードなどのすべての通信はDHT的に分散され、特定のサーバーに依存しません

208デフォルトの名無しさん2016/05/01(日) 23:24:37.04ID:u17iQe5m
EXCELのVBAでメール返信(OUTLOOK)をする仕組みを作りたいのですが、
元メールを引用するにはどうしたら良いでしょうか?
タイトルやらアドレスやら本文がくっついてないと、
どうも返信感がでないと思いまして。

209デフォルトの名無しさん2016/05/03(火) 10:11:50.64ID:YSERRocv
>>208
Outlookヘルプから

次の例は、現在のフォルダを受信トレイに設定し、フォルダの 2 番目のメッセージを表示します。
Visual Basic for Applications
Set myOlApp = Outlook.Application
Set myNamespace = myOlApp.GetNamespace("MAPI")
Set myFolder = myNamespace.GetDefaultFolder(olFolderInbox)
myFolder.Display
Set myItem = myFolder.Items(2)
myItem.Display

210デフォルトの名無しさん2016/06/04(土) 14:31:26.42ID:ZLbjql14
Excel向けだとVBA関連の本は結構あるのにOutlookのVBA本って
あんまり無いですね。
Outlookの仕分け機能では宛先とCCに○○から来た時に動作する
条件を付けられますが、宛先○○から来た時には動作するけど
CCに何か入っていた場合は動作しないマクロは作れないでしょうか。
環境はWin7、Outlook2010です。

211デフォルトの名無しさん2016/06/04(土) 17:57:25.97ID:+2vTx5YA
>>210
作れるよ

212デフォルトの名無しさん2016/06/04(土) 17:59:26.06ID:+2vTx5YA
outlook vba mail
とかでググれ

213デフォルトの名無しさん2016/06/04(土) 21:08:48.99ID:xa1tVlDu
>>210
多分こんな感じでできるかと

Public WithEvents InboxItems As Items
Private Sub Application_Startup()
Set InboxItems = Application.Session.GetDefaultFolder(olFolderInbox).Items
End Sub
Private Sub InboxItems_ItemAdd(ByVal Item As Object)
Dim mailItem As Outlook.mailItem
Set mailItem = Item
If InStr(mailItem.To, "○○") > 0 And mailItem.CC = "" Then
MsgBox "何かする"
End If
End Sub

214デフォルトの名無しさん2016/06/12(日) 09:42:53.63ID:D40PIOb3
               【Win10】    こんな犯罪級OS薦めんなよwww   ↓   【スパイウェア】



この使用許諾契約書には書かれています

”最後にあなたのコンテンツを含む個人データ(例えばあなたの電子メールの内容や―プライベート通信やプライベートフォルダ内のファイル)にアクセスし―開示し保全します”

開示する ここ重要だよ

契約がなければ通常 高度な違法行為になりうることです それはあなたが自分の意思としてこの契約書に同意したのです
https://www.youtube.com/watch?v=ZBwEmgdqB1c



       【秘密保護法】  ナチスの手口でサヨクを捕まるんだろ? 早くやってみろよ m9(^Д^)  【緊急事態法】



スノーデン氏→国家秘密法は諜報機関NSAの日本での活動を容易にするために米国が設計して日本政府に導入を要求したもの。
全日本人が調査の対象であり、NSAはあなたの交際関係、信仰等の個人情報を把握している。
https://twitter.com/hopi_domingo/status/740193540529999873
今朝、辺野古で新基地建設に反対するママの会メンバーに対して、機動隊員が「お前たちには汚い血が流れている」などと暴言を吐いたそうです。
自分のやっていることを「だってお金欲しいもん〜」「俺の写真を待ち受けにしろ」とも (顔写真)
https://twitter.com/MothersNoWar/status/690357793702940672
サンマ以降のバラエティ芸人の大半が、暴走族出身で極右思想。原発反対派を「放射脳」と嘲笑する連中。
芸能界極右は石原慎太郎一家を筆頭に、上田晋也 草野仁 津川雅彦 向井理 松本人志 宇多田ヒカル マツコ 春日俊彰 田村淳 北村晴雄
https://twitter.com/tokaia mada/status/630627400552845312

215デフォルトの名無しさん2016/06/14(火) 02:34:53.84ID:2DTiTbF7
vbaでshell関数を使って指定パスのエクスプローラをファイル選択状態で開いてるのですが、
家でやると何でもないのですが、会社でやると、その方法で立ち上げたエクスプローラは
1分〜数分以内に「エクスプローラは停止しました」となって落ちます。そのフォルダだけ
落ちるので他のは巻き込まれないだけマシですが、手動で立ち上げた他のエクスプローラで
このように不意に落ちた事はないので、プログラムから立ち上げたエクスプローラが特別
不安定だとしか思えないのですが、原因が不明です。
それで、家と会社の違いは、会社だと共有フォルダを開いている事です。
家ではテスト環境をローカルで構成している為か、全く問題は起きません。

色々ぐぐってみたのですが原因が不明です。
vbaから開く方法で、解決策、あるいは次善の方法等ありますでしょうか。

shell関数はこのように使っております。
Shell "Explorer.exe /select, """ & path & """", vbNormalFocus

環境はWindows7 Excel2010(32bit)です。

216デフォルトの名無しさん2016/06/14(火) 06:56:55.57ID:wwwgAdKU
>>215
試しに自宅の環境で共有フォルダをshell関数でファイル選択状態で開いてみたけど
特に問題なかったよ

原因は共有フォルダであること
ではないのじゃないかな

その共有フォルダへのショートカットを作って
それをshell関数を使ってexplorerで開いてみるとかは?

217デフォルトの名無しさん2016/06/14(火) 08:10:13.51ID:BcKyLCvc
手動で起動したプロセスは、親プロセスが無く、単独のプロセスだから、ずっと生き残るのかな?

Aプログラム(Aプロセス)から起動したプロセスは、親プロセスがAとなり、
Aを終了すると、その子プロセスもすべて、連鎖して終了するのかな?

プロセスを起動する際、親子関係を切れば?
ただしそうすると、起動されたプロセスは、A終了後も残り続けるから、
誰がそのプロセスを終了するのかが、問題となる

漏れは、Windowsはよく知らない。Linuxから推測して書いた

218デフォルトの名無しさん2016/06/14(火) 08:45:39.28ID:2DTiTbF7
>>216
ショートカットから開く方法ですか、考えもしなかったです。
確実に再現するバグではない(場合によっては20分くらい経ってからクラッシュしますし、端末によっては何も起きなかったりします。)
なので、原因を掴むのが難しいです。

>>217
なるほど、プロセスが分離されているから巻き込まれなかったんですかね。

前後のコードを見返しているのですが、shell関数を読んだ直後に
Kill thisworkbook.fullName
thisworkbook.close
を読んで終了させているんですが、ひょっとしたらこの兼ね合いが原因かも?とふと思いました。
shell関数は非同期処理で、会社の共有フォルダを開くときはローカルと違って若干起動に時間がかかります。
shell関数の処理が完了しきっていないのに即終了させるから、動作が不安定になってる可能性はありますかね・・。

なのでとりあえずShell関数を、Wscript.ShellのRunメソッドの同期処理に置換えてみました。
それで明日会社でテストしてみます。

219デフォルトの名無しさん2016/06/15(水) 20:38:23.92ID:985LHqkd
それVBAとか関係なく、普通にネットワーク上のフォルダを表示してるエクスプローラでも発生してるんじゃないのか?
https://support.microsoft.com/ja-jp/kb/972685#/ja-jp/kb/972685
https://support.microsoft.com/ja-jp/kb/2494427#/ja-jp/kb/2494427
とりあえず俺はこの二つで直ったが、エクスプローラ 落ちる とかでググってみ

2202182016/06/16(木) 07:48:37.40ID:MO4h1nff
>>219
同期処理に変えたら全く落ちなくなりました。
どうやら推測は当たったみたいです。

手動で立ちあげてる時には同じトラブルは一度も起こったこと無く、誰からも聞いていないので、
VBA処理が原因で間違いないと思います。

ぐぐっては見てたんですけど、VBA関連でのエラー報告は0でしたね。
しかし、元々この手のトラブル報告がかなり多いことにはびっくりしました。

とりあえずは解決です。皆さんどうも有難うございました。

221デフォルトの名無しさん2016/06/16(木) 14:05:29.72ID:tOwQ8tvq
タイミングの問題で、バグが起きるときは、

sleep 3秒などで、時間稼ぎすることが多いな

222デフォルトの名無しさん2016/06/16(木) 16:27:03.77ID:YtVxucfB
>>221
タイミングというか処理を待ち合わせる必要があるって事だよな
3秒で完了しない処理だと問題が起きる
90%くらい解決出来れば実用上は問題にならないかも知れないけど

223デフォルトの名無しさん2016/06/16(木) 21:40:45.67ID:JOmdLZoV
' キャッシュ反映を待って5秒待つ

↑これなんとかして

224デフォルトの名無しさん2016/06/16(木) 21:53:33.23ID:EpEOLr57
>>223
何のキャッシュか判らないけど
キャッシュをフラッシュするインターフェイスがあればそれを使えば良いのでは
無いなら知らない

225デフォルトの名無しさん2016/06/17(金) 01:16:02.29ID:Sh+IdTol
起動方法と起動のタイミングの問題で
>1分〜数分以内に「エクスプローラは停止しました」
>場合によっては20分くらい経ってからクラッシュ
のような症状が出るとは考えにくいけどな

まあ、直ったって言うならそれでいいけど

226樵の結び目。2016/09/03(土) 18:27:18.44ID:Ms7vNg4j
この作者について
http://img.atwikiimg.com/www9.atwiki.jp/gensouv/attach/346/23/ExcelVBAPractice.html
どう思いますか??
 

227デフォルトの名無しさん2016/09/28(水) 19:27:48.59ID:BVBInYIb
vbaの And, Or って短絡評価してくれないの???

228デフォルトの名無しさん2016/09/28(水) 20:30:34.84ID:X231kNmm
>>227
普通しない
(常にしないかどうかは知らんけど)

229デフォルトの名無しさん2016/09/28(水) 22:20:25.14ID:w7cfX4QA
X(n) And Y(m) で X(n) = False だった場合、Y(m) は評価しなくても式が False と確定する
Or でも同様のことが可能

VBAがショートサーキットしているかどうかは、各関数で Debug ログを出力してみればわかる

230デフォルトの名無しさん2016/09/29(木) 04:55:17.68ID:IF5lu7hc
>>229
いちいち短絡評価の説明なんてしなくていいよ...

2312272016/09/29(木) 08:22:26.74ID:l2tsRcXf
くぅ。
短絡評価してくれるもんだと思って、
True, False, Nullを返す関数の結果で、
NullをFalseに倒したくて、
左辺でNot isNullやってたけど、
右辺もNullで動いてしまってエラーになってはまったわ。

232デフォルトの名無しさん2016/09/29(木) 12:46:05.66ID:tIM+raH6
VBAあるある

233デフォルトの名無しさん2016/10/06(木) 19:51:33.65ID:prbbit7d
.NetならOrElseやAndAlsoが使えるし
Nullable指定も出来るから便利なんだけどなー

まあ無いものねだりしても始まらないか

234デフォルトの名無しさん2016/10/08(土) 17:43:11.29ID:fiaM9vLl
VB(A)はWithとかある割にそういうとこは全然気が利かないよな
C言語すら知らない人が作った言語なんだろう事は判る

235デフォルトの名無しさん2016/10/08(土) 22:59:38.27ID:315EhZFM
VBって元々はMSじゃないんだよね BASIC好きのゲイツが惚れ込んで買収しただけ

236デフォルトの名無しさん2016/10/27(木) 20:44:38.40ID:LE0ob9Yw
vbaの中、上級者向けの書籍を教えてください

237デフォルトの名無しさん2016/10/27(木) 21:44:23.99ID:BIHhfe0H
漠然と「VBAの初心者向けの本を教えてください」ってのはよくあるが、上級者向けは珍しいね
ある程度基礎が身に付き、やりたいことが分かってきていれば
○○に関する本、ってなるように思うんだが・・・

田中亨氏の「Excel VBA 逆引き辞典パーフェクト 」は名著だよ

238デフォルトの名無しさん2016/10/28(金) 04:23:54.86ID:s9odN72t
>>237
ありがとうございます。
クラスや多段階配列、イベント自作、擬似コントロール配列あたりの情報がある書籍はありませんか?

239デフォルトの名無しさん2016/10/28(金) 15:06:05.95ID:Sg+Wt/Uz
アプリ作成で学ぶExcel VBAプログラミングユーザーフォーム&コントロール(横山達大著)
かんたんプログラミング 応用編(大村あつし著)
同じく、かんたんプログラミング コントロール関数編

デバッグ関連だと
立山秀利著の本

240デフォルトの名無しさん2016/10/29(土) 23:22:10.90ID:b3lytwnZ
VBAでコードを抜き出してSVNやgitで管理したりするとそれだけで上級者っぽくなる

241デフォルトの名無しさん2016/10/30(日) 08:10:21.54ID:R4QvvoTp
それ以上にバカっぽいけどなw

242デフォルトの名無しさん2016/10/30(日) 09:23:46.57ID:2kQlDpFE
今時差分管理もしてないのかよ

243デフォルトの名無しさん2016/10/31(月) 23:59:17.10ID:9abcSnRr
VBACとか使ってんの?

244デフォルトの名無しさん2017/02/06(月) 12:06:59.89ID:1XFRepCN
PowerPointのVBAでファイルを閉じた後も変数の値が保存されるようにしたいんですが外部のテキストに書き出す以外にファイル本体にどうにかして埋め込む方法はありますか?

245デフォルトの名無しさん2017/02/06(月) 14:57:53.43ID:atuXlQHb
透明のシェイプとかに書くとか色々あるけど
実際本体ファイルを更新されるとバージョン管理とか使う側が気持ち悪がるとか運用面で問題が出そう

246デフォルトの名無しさん2017/02/06(月) 19:29:23.46ID:4FxLnD3n
Excel脳っすなぁ
標準的なユーザーデータ保存場所がちゃんとあるんだからそれ使えばいいじゃん

247デフォルトの名無しさん2017/02/06(月) 19:58:54.20ID:KOZLaxG/
>>246
どうすればいいでしょうか

248デフォルトの名無しさん2017/02/06(月) 21:21:37.88ID:VJg+IRhi

249デフォルトの名無しさん2017/02/07(火) 07:09:26.95ID:HIDKMkau
>>246
条件によるだろ
思いつきで即答すんなアホ

250デフォルトの名無しさん2017/02/07(火) 07:27:10.54ID:ff698yUf
>>249
条件って
ファイル本体に埋め込みたい
ってことだろ
>>246 の保存場所がどこの事を言ってるのかよくわからんが >>245 より >>248 の方がはるかにマシ

251デフォルトの名無しさん2017/02/07(火) 07:40:32.09ID:xddq+MTq
ファイル本体に埋め込みすんのがアホなんだよわかれよ素人
ゴミを量産して人に迷惑かけないでくれ
独りよがりの仕事してんじゃねえよ

252デフォルトの名無しさん2017/02/07(火) 08:07:27.12ID:ff698yUf
単なる基地害だったのか

253デフォルトの名無しさん2017/02/07(火) 20:25:02.30ID:1dqSFjs6
実際に仕事してるとそれこそ基地外避けを作る必要が出てきたりするんだよな

254デフォルトの名無しさん2017/02/07(火) 21:24:47.40ID:lpX4EXgF
ユーザーデータを変な場所に保存したりするやつとか避けないとな

255デフォルトの名無しさん2017/02/07(火) 22:43:16.46ID:diTiDCUQ
>>254
> 変な場所に
透明のシェイプとかのことですね、わかります

256デフォルトの名無しさん2017/02/13(月) 17:14:33.92ID:QPcPOced
50枚のスライドが入ったパワポが5個あります。
これを統合したいのですが
ファイル1の1枚目
ファイル2の1枚目
ファイル3の1枚目
ファイル4の1枚目
ファイル5の1枚目
ファイル1の2枚目。。。

という順番にしたいのです。
どういうマクロを書けばいいでしょうか?

257デフォルトの名無しさん2017/02/13(月) 21:36:30.61ID:MAF656mM
>>256
その通りのマクロを書けばいいのでは?

258デフォルトの名無しさん2017/02/13(月) 21:54:55.31ID:1gaAmlEB
新規で作ったらコピペを繰り返すだけ

259デフォルトの名無しさん2017/02/14(火) 00:38:49.96ID:hvVJhpIb
パワポってマクロ使えるんだ
そらそうだわな

260デフォルトの名無しさん2017/02/14(火) 01:58:27.90ID:ahDpDw9M
ExcelVBAをつかいこなしていても
パワポはマクロの記録がないと腰が重いな

261デフォルトの名無しさん2017/02/15(水) 08:18:34.60ID:uIQboeV9
>>256
この作業用を何回も繰り返さないといけないの?
1度きりならあなたの場合は手作業の方が早い気が

262デフォルトの名無しさん2017/02/15(水) 13:14:12.73ID:zgJtAmDR
>>256
スマホからだから試してないけどこんな感じかな
Application.Presentations.Open(ひとつ目のファイル)
Application.Presentations.Open(ふたつ目のファイル)
...
Application.Presentations.Open(いつつ目のファイル)
Set P = Application.Presentations.Add
For I = 1 To 50
For J = 1 To 5
Application.Presentations.Item(J).Slides(I).Copy
P.Slides.Paste
Next
Next
P.SaveAs(新規のファイル)

263デフォルトの名無しさん2017/02/23(木) 13:32:21.69ID:xPy6pfR0
選択されているセル範囲内の文字、図形を削除する手順を作ってみましたが、処理がえらく重いです。
もっと処理を早くする方法はないでしょうか?
Sub sakujo()
Application.ScreenUpdating = False   '画面更新を停止
Dim shp As Shape
Dim rng As Range
If TypeName(Selection) <> "Range" Then Exit Sub
For Each shp In ActiveSheet.Shapes
Selection.ClearContents
Set rng = Range(shp.TopLeftCell, shp.BottomRightCell)  '図形の配置されているセル範囲をオブジェクト変数にセット
If Not (Intersect(rng, Selection) Is Nothing) Then  '図形の配置されている範囲と選択されているセル範囲が重なっているときに図形を削除
shp.Delete
End If
Next
Application.ScreenUpdating = True  '画面更新を再開
End Sub

264デフォルトの名無しさん2017/02/23(木) 14:40:32.47ID:bekNjoMq
>>263
再計算とイベントも停止してみた?
あと、コレクションに対するループの中で自分自身のコレクションが変化するのは、なんとなくまずい気がする
根拠はないけど、それって遅くなる要因と違う?

265デフォルトの名無しさん2017/02/23(木) 15:02:34.32ID:Q2T7iSLN
処理の基本をよく考えるべき。
1.Shape毎にSelection.ClearContentsする意味は?
2.shp.Delete後もループする意味は?
3.そもそもSelectionって何?つまり何が選択されている時に削除したいの?

For Each shp In ActiveSheet.Shapes
If shp Is Selection Then
shp.Delete
Exit For
End If
Next

じゃ駄目?

266デフォルトの名無しさん2017/02/23(木) 15:08:21.72ID:Q2T7iSLN
選択されているセル範囲については最初のIf文でExit Subしてるから削除されないんじゃ?
処理がよく分からん。

選択されているShapeの下のRangeの内容を削除したいならshp=Selectionの場合に
Range(shp.TopLeftCell,shp.BottomRightCell).ClearContents
で良いんじゃ?

267デフォルトの名無しさん2017/02/23(木) 15:10:34.31ID:Q2T7iSLN
shp=Selectionの場合じゃなくてshp Is Selectionの場合だな。
shp.Deleteの前ね。

268デフォルトの名無しさん2017/02/23(木) 15:24:01.29ID:5OVH7aZj
>>265
質問者じゃないけど変わって説明するよ
・シート上に文字と図形が複数箇所に設定されている
・消す範囲を選択して、その範囲内の文字と図形を消すコードを書いた
・でもなぜか遅い

質問者に言えるのは、
・Selection.ClearContentsはfor eachの外でいい
・試しに100個のshapeを貼り付けて50個くらいが入る範囲を選択して消してみたら一瞬で終了(もちろんコードでだよ)
・遅いって具体的にどれくらいなの?

269デフォルトの名無しさん2017/02/23(木) 16:00:14.32ID:Q2T7iSLN
>>268
コード見りゃわかる。
でもコードがやってることは無駄な部分が多いから聞いてる。

最初のIf文を見ればRangeを選択した場合はExit Subしたいみたいだがら範囲選択した場合は処理して欲しく無いんだよな。
→じゃ、どんな時に処理して欲しいの?

For Each shp In ActiveSheet.Shapes
If shp Is Selection Then
Range(shp.TopLeftCell,shp.BottomRightCell).ClearContents
shp.Delete
Exit For
End If
Next

じゃ駄目なの?

270デフォルトの名無しさん2017/02/23(木) 16:07:14.86ID:xPy6pfR0
今までは長い時で1〜1.5秒程止まっていました
>>268さんの言われた通り、Selection.ClearContentsの位置を変えたらスムーズになりましたのでこれで行こうと思います
たくさんご意見頂きありがとうございました

271デフォルトの名無しさん2017/02/23(木) 16:14:41.52ID:5OVH7aZj
>>269
> If TypeName(Selection) <> "Range" Then Exit Sub
だよ

272デフォルトの名無しさん2017/02/26(日) 14:44:16.79ID:nMuhJunv
エクセルのマクロでも質問大丈夫でしょうか?
名前と同じファイル名の画像を名前セルの隣に貼り付けるプログラムなんですが
Sub ボタン1_Click()
Const n As Long = 2
Dim i As Long
Dim x As Double
Dim s As String
Dim t As FileDialog
Dim m As VbMsgBoxResult
With ActiveSheet
For i = 2 To .Cells(.Rows.Count, 2).End(xlUp).Row Step 6
Set r = .Cells(i, 3).MergeArea
s = "D:\画像\1\" & .Cells(i, 2).Value & ".jpg"
Dir Application.Path
With .Pictures.Insert(s).ShapeRange
.LockAspectRatio = msoTrue
x = Application.Min(r.Width / .Width, (r.Height - n) / .Height)
.Width = .Width * x
.Left = r.Left + (r.Width - .Width) / 2
.Top = r.Top + (r.Height - .Height) / 2
End With
Next
End With
End Sub
この"D:\画像\1\"の部分をフォルダ選択できるようにしたいので
Dim s As String
  Dim t As FileDialog
Set t = Application.FileDialog(msoFileDialogFolderPicker)
s = "t" & .Cells(i, 2).Value & ".jpg"
としたら「1004 PicturesクラスのInsertプロパティを取得できません。」と実行できません
どうしたら"D:\画像\1\"の部分をフォルダ選択できるようにできるのでしょうか?ご教示お願い致します。

273デフォルトの名無しさん2017/02/26(日) 16:00:22.84ID:nt1S72uw
>>272
Dim s As String
Dim t As String
With Application.FileDialog(msoFileDialogFolderPicker)
  If .Show = False Then Exit Sub
  t = .SelectedItems(1) & "\"
End With
'途中省略
s = t & .Cells(i, 2).Value & ".jpg"

じゃないかな?
あと
元コードもそうだけど
フォルダ内に その画像ファイルが存在してなかった時の対策も必要だと思うよ
同じエラーになるぞ それとも絶対 あるのが 確定してる?

274デフォルトの名無しさん2017/02/26(日) 16:45:49.33ID:nMuhJunv
>>273
大変ありがとうございます!
ただ、貼り付ける画像は複数あり、貼り付けるたびにフォルダ選択画面が出てしまいますので、一気に貼り付けられないものでしょうか?
ファイルが存在してない時の対策は、セルの状態を色変えて罫線で斜線を挿入したいと考えてますが、まだそこまで進む前段階がクリアできないので困ってます
よろしくお願いします

275デフォルトの名無しさん2017/02/26(日) 16:51:45.39ID:nt1S72uw
>>274
ん? そこは分ってるとおもたよ
フォルダ選択部分は Forループの外だよ
↓ここねw
With Application.FileDialog(msoFileDialogFolderPicker)
 If .Show = False Then Exit Sub
 t = .SelectedItems(1) & "\"
End With

276デフォルトの名無しさん2017/02/26(日) 16:57:59.74ID:nMuhJunv
>>275
あっ!できました!ありがとうございます!助かりました!

277デフォルトの名無しさん2017/03/06(月) 23:29:36.96ID:QCgyLcj6
こんにちは。

パワーポイント2013のVBAについて分かる方教えて下さい。

やりたいことは、グラデーションの塗りつぶしがあるシェイプのGradientStopsのそれぞれの色を変化させるアニメーションの方法です。

2013ではできないけど2016ではできる等の情報もあればお願い致します。

278デフォルトの名無しさん2017/03/08(水) 21:50:45.20ID:DO0ivfK5
vbaだけでhttpサーバーって出来る?

279デフォルトの名無しさん2017/03/08(水) 23:04:04.36ID:Tpob7EG8
俺が手を下すまでもないな
答えてやれよ
>>280

280デフォルトの名無しさん2017/03/09(木) 01:39:01.40ID:UFk6xx1O
VBAだけってのが
外部コントロール使用禁止
API呼び出し禁止
なら不可能です

281デフォルトの名無しさん2017/04/09(日) 15:56:17.26ID:9WwYB+FH
VBAの変数の値を次回の処理を行う時まで記録しておくのにセルに書き込みをしたりしていますが、

セルにアクセスするのを減らすためにセルに記録しなくて処理終了時に変数値をVBA内で保存しておいてくれる一次記憶領域みたいな物はないのでしょうか?

282デフォルトの名無しさん2017/04/09(日) 16:02:56.39ID:9WwYB+FH
ちりも積もればの話ですが
足し算引き算割り算レベルの計算をセルに関数を割り当てて行うのと
同じ計算式を変数を用いてVBAで書いて実行するのとで、より処理速度が速いのはどちらでしょうか?

283デフォルトの名無しさん2017/04/09(日) 16:09:57.30ID:Lq/WJuQk
>>281
セルでいいんじゃないの?
ただそのIOは配列アクセスを使うべき
ループで1セルづつ読み込むとかがナンセンス

284デフォルトの名無しさん2017/04/09(日) 16:14:42.36ID:K8MFArI9
>>281
説明がいまいち分かりにくい。
次回ってのは何時のことを言ってる?
グローバルな変数じゃダメなの?
次にそのブックを開くまで保持したいならセルってのも分かるんだが。
で、その場合にセルの代わりに保持したいならCustomDocumetProperties使ったりするかな。

285デフォルトの名無しさん2017/04/09(日) 16:27:32.06ID:9WwYB+FH
>>283
ありがとうございます。
>配列アクセス
勉強してみます。

>>284
Bookを閉じずに他からデーターを取り込み再度VBA実行を繰り返します。
>グローバル変数
>CustomDocumetProperties
勉強してみます。

グローバル変数に代入した数値は処理を中断しても生き続けるのであればそれで解決しそうです。

286デフォルトの名無しさん2017/04/09(日) 16:44:07.10ID:9WwYB+FH
>>284
プロシージャの上に定義すると処理が終了しても最終定義された内容は残ったままなんですね!
今まで処理を中断する必要がある場合は変数をすべてセルに書き出していましたが大発見です。ありがとうございました。

287デフォルトの名無しさん2017/04/09(日) 19:39:59.08ID:9WwYB+FH
Public変数もしくは通常の変数の指定数の限界はあるのでしょうか?
問題なく動くレベルは何個ぐらいでしょうか?

50個
100個
1000個
10000個でも平気だっり?
実は
100000個以上でも問題ないとか?

288デフォルトの名無しさん2017/04/09(日) 19:51:50.86ID:0T9WQSVM
>>287
使えるメモリは決まってる
変数の個数じゃなくてそれぞれのバイト数の合計

289デフォルトの名無しさん2017/04/09(日) 23:55:43.90ID:K8MFArI9
>>287
グローバル変数(Public)は便利に見えるけどスコープを考えて必要無い所では使わない方が良い。
PublicかPrivateかプロシージャ内で宣言するかを意識して使った方が良いね。

290デフォルトの名無しさん2017/04/10(月) 02:47:06.39ID:AhmZ51rM
日曜の午後からずっとVBAを書いてるけどまだおわらね〜
てかやればやるほど選択肢が爆発的に増えてきて一生かかってもおわりそうにね〜!w

291デフォルトの名無しさん2017/04/10(月) 04:05:13.85ID:sRLMXvmn
>>287
しかもEndやErrorで抜けたら破棄されるという罠

292デフォルトの名無しさん2017/04/11(火) 00:40:18.97ID:egN7ZnVO
素数や組み合わせ爆発のような数学の迷宮的な問題に陥って
一生かかってもコードを完成させるのは無理ですよみたいな場合もあるのでしょうか?

293デフォルトの名無しさん2017/04/11(火) 10:41:22.79ID:Ei1BFwyD
>>292
数学的バックグラウンドがなければコードが書けないという類いの問題はあるね。
たとえばNP困難なやつ。
巡回セールスマンとかナップサック問題とか、ナーススケジューリング問題とか。
自力でなければ、それなりの回答が得られる解法(コード)が既に存在してるものもある。

294デフォルトの名無しさん2017/04/11(火) 11:01:45.96ID:o/k96Ri6
問題を解く方法を考案するのと、その方法をコンピューター言語に翻訳する作業は別ですわ
それぞれに異なった知識と才能が必要となりますので

295デフォルトの名無しさん2017/04/11(火) 11:03:15.94ID:6dnWkPrh
>>291
End Subの行にブレークポイント、これ

296デフォルトの名無しさん2017/04/12(水) 22:41:46.94ID:iuenojzm
パブリック変数で

1000個
10000個でも平気だっり?

とかどんな拷問なんだよw

297デフォルトの名無しさん2017/04/20(木) 23:26:11.80ID:92wBssf5
テストしてみたがパブリック変数500個は問題なく動いた。
もっと使ってる人いる?

298デフォルトの名無しさん2017/04/21(金) 19:40:41.67ID:TpPjDerb
いらない

299デフォルトの名無しさん2017/04/21(金) 21:22:06.10ID:BWuBR5xw
変数の一部を変数にする事は出来ないのでしょうか?(代入
とかではなく)
たとえば↓はイメージですが変数名の箇所を文字列をつなぎ合わせる時と
同じように変数をわりあてられないのでしょうか?(以下は動きませんがphpではこれができます。)
dim aaa1
dim aaa
dim no
dim bbb

aaa1=例文1
aaa=aaa
no=1

aaa & no = bbb

msgbox bbb

結果は「例文1」 と表示されますみたな、、 

300デフォルトの名無しさん2017/04/21(金) 21:28:31.62ID:BWuBR5xw
>>299
最終的には
aaa1=「例文1」
aaa2=「例文2」
aaa3=「例文3」


とし
aaa & no のno番号だけ差し替えて制御するみないな感じで使います。
ただしnoの番号は連続した数字ではなく他の集計結果からランダムに発生するため
ループ処理等では成り立たず変数のように扱う必要があります。

301デフォルトの名無しさん2017/04/21(金) 22:10:11.53ID:9tskJEPF
>>300
aaa1とかaaa2を変数として捉えず、文字列と数値を要素に持つ2次元配列と見れば良い
で、データ全体を制御するときは、aaa1,aaa2...の2次元配列全てを要素として持つコレクションオブジェクトを生成して操作する

302デフォルトの名無しさん2017/04/21(金) 22:18:30.36ID:TpPjDerb
>>300
Dictionaryのkeyにすれば良いんじゃね

303デフォルトの名無しさん2017/04/21(金) 22:25:23.50ID:9tskJEPF
CollectionよりDictionaryだな、確かに

304デフォルトの名無しさん2017/04/21(金) 23:24:44.93ID:3F+Ljh12
そういう質問、初心者によく聞かれるわ
普通は配列を使えと教えるもんだが

305デフォルトの名無しさん2017/04/22(土) 06:16:50.97ID:zUhE/Mll
>>302
>>301
ありがとうございます。Collection Dictionary 調べてみましたが
どちらも説明をざっと読んでも使い方が理解できませんでしたが挑戦してみます。

phpのように (aaa & no) =
と変数名自体を複数の変数で合成する事は出来ないのですね。

3062992017/04/22(土) 08:27:20.54ID:zUhE/Mll
>>300
>>301
>>302
>>304

aaa1=「状況に応じて変化する数値1」
aaa2=「状況に応じて変化する数値2」
aaa3=「状況に応じて変化する数値3」


すみません説明を単純にするために「例文1」としてましたが
変数に格納されるのは状況に応じて変化する数値(他の集計の計算結果)でした。
固定された文言であればDictionary keyで処理できるというのはわかりましたが
格納されている物が変化する数値の場合かつ
変数名を数字で管理(他の集計から3という結果が出たら→aaa3が適応されるみたいな)
したい場合こういうことを実現する方法はありますでしょうか?

307デフォルトの名無しさん2017/04/22(土) 08:53:12.92ID:MM2jcjjz
>>306
変数名を数字だけで管理する方法はない。
VBAの仕様上、できない。

というか、その集計結果なるものがプログラム実行時に決定するのだとしたら、集計結果を格納する変数の名前に集計結果の数値をはじめから盛り込もうとするのは無理があるし、そもそも理由が分からない。
やりたいことを実現するにはもっと適切な他の方法があるんじゃないかな。

308デフォルトの名無しさん2017/04/22(土) 11:27:30.44ID:6RXuRSFv
>>306
Dictionaryのvalueは変更可能

3092992017/04/22(土) 15:29:06.19ID:zUhE/Mll
>>308
>>307
理解するのにかなり時間がかかりましたがDictionaryなんとなくわかりました。
これって Dim とかPublicとかの変数とは別に存在できるんですね。
全く未知の分野ですが使ってみます。ありがとうございました。

310デフォルトの名無しさん2017/04/22(土) 20:43:48.30ID:zUhE/Mll
Dim dic As New Dictionary
Dim i As Integer

dic.Add "キー1", "アイテム1"
dic.Add "キー2", "アイテム2"
dic.Add "キー3", "アイテム3"

Dictionaryで指定した"キー"と "アイテム"は処理が終了するとリセットされるようですが、
グローバル変数のように処理が終了しても次実行されるまで記憶させておくようにする事は出来ないのでしょうか?

311デフォルトの名無しさん2017/04/22(土) 22:48:51.75ID:AOzJBbd9
>>310
プロシージャを跨いで値を保持させるなら、グローバルな配列変数、(アプリケーションがExcelならば)セル、シェイプ、カスタムドキュメントプロパティ、グローバルコレクション、自作のグローバルクラスのインスタンスなどに値を記憶させるしかない

でもそれならわざわざプロシージャ内でDictionaryを使って連想配列を操作するより、ExcelのセルにKeyと値を書き込んで配列アクセスして読み書きする処理の方が遥かに楽だと思う

312デフォルトの名無しさん2017/04/22(土) 23:30:15.48ID:zUhE/Mll
>>311
ありがとうございます。
今作っているコードでセルへのアクセスが膨大になってきて処理時間がどんどん長くなる傾向がみられまして
全操作をセルにアクセスせずに完結させようと色々考えていましたがなかなかそうはいかないようですね。

313デフォルトの名無しさん2017/04/23(日) 05:30:19.61ID:t5ve42Di
>>312
Dim dic As New Dictionary
の宣言を何処でしているかによるんじゃね?

314デフォルトの名無しさん2017/04/23(日) 10:16:09.39ID:wfwXXeKO
>>312
標準モジュールとかでDictionary型のオブジェクト変数をグローバルスコープ(Public)でNew宣言すれば、処理を抜けてもDictionaryのItemは初期化されないんじゃないのかな
ただ単なる配列の処理でデータが数千件程度なら、描画止めた状態でワークシート使った方が遥かに楽だと思うが。

315デフォルトの名無しさん2017/04/23(日) 16:51:51.75ID:fs201BJ1
>>311
引数に渡すってのを忘れてるぞ。
一番使われてるんじゃないか?

316デフォルトの名無しさん2017/04/23(日) 17:11:32.92ID:yvJyPXpi
>>315
何の引数に渡すことを指してるのかな?

317デフォルトの名無しさん2017/04/23(日) 18:02:04.26ID:fs201BJ1
>>316
プロシージャを跨ぐって話だろ。
別のプロシ−ジャに引数として渡せば形の上ではそれぞれのローカル変数でも値は保持されるだろ。

318デフォルトの名無しさん2017/04/23(日) 18:27:09.16ID:yvJyPXpi
>>317
>>310を読んでなんとなく、一個のルーチンのプロシージャ間の値の受け渡しの話ではなく、ルーチン内で一度AddしたDictionaryのKeyとItemを何らかの形で保存して、同じルーチンを再実行したときにKeyとItemを再利用することが出来るかどうかという話だと思ったんだが

まぁ、オブジェクトプロパティへの値の保存も実際はそのオブジェクトを定義してるクラスのメソッドに引数を渡してるのと同じだから、変わらないといえば変わらないけど

319デフォルトの名無しさん2017/04/28(金) 17:33:41.10ID:krqKI6DB
超既出FAQですな。

『Public 宣言された変数の有効期間』
https://support.microsoft.com/ja-jp/help/408871

簡単に言うと、メソッド実行中以外はいつでもpublic変数はクリアされうるから、値が残っていることを期待したマクロを書くなってこと。

320デフォルトの名無しさん2017/04/28(金) 19:14:11.69ID:AZuqyiJa
>>319
俺は使う時にクリアされてるかチェックしてクリアされてたら再設定するようにしてるな。
値が0だったら値を取得するFunctionを呼び出すって感じ。

321デフォルトの名無しさん2017/04/28(金) 22:13:43.74ID:A3VkBONm
Publicな静的変数は使わない。
エクセルのセルとかワードの文書変数とかの規定オブジェクトにデータを書き込んだ方が便利

322デフォルトの名無しさん2017/04/29(土) 02:16:02.91ID:2iGvQ1xG
>>321
いや、それは格好悪いんじゃね?
セルを使ったりCustomDocumentPropertiesも使うけど、それに合ったものだから使うわけでPublic変数に合ったものもある。
適材適所だろ。

323デフォルトの名無しさん2017/05/25(木) 20:51:55.45ID:yS9f0RVc
ontime で実行するプロシージャって標準モジュールに書かないとあかんのか。
このブックでマクロが使用できないか、またはすべてのマクロが無効になっている可能性があります。って出た。

324デフォルトの名無しさん2017/05/25(木) 21:07:30.77ID:JTnnq+Q0
>>323
スコープ
普通にCallで呼び出せる場所にないと実行できないのは、どの方法でも同じ

325デフォルトの名無しさん2017/05/26(金) 00:03:34.69ID:Fw61rXsb
>>324
ThisWorkBookのモジュールからOnTimeでThisWorkBookのモジュール内のPrivate Sub を予約したんですが・・・これじゃ駄目なんですかね?

326デフォルトの名無しさん2017/05/26(金) 23:19:52.51ID:Fw61rXsb
>>325です
OnTimeで実行予約するプロシージャを標準モジュールに移動したら動くようになりました〜

新着レスの表示
レスを投稿する