X



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

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

それにしても、単なる知識を披露しあっているだけの時は頭良さそうなふりはできるが、
いよいよ自身の認識を問われる事態になるとここにいる連中、そこの浅さを露呈するやつ多すぎ
所詮、2chだな
0005デフォルトの名無しさん
垢版 |
2015/05/26(火) 11:15:15.08ID:IGUKy8Mq
>>3
むしろ自分が歯が立たない相手だと分かったら「精神病と馬鹿」というレッテルを相手に貼って
逃げるお前の方がヘタレだけどな

精神病で馬鹿なのはお前の方だよ
0006デフォルトの名無しさん
垢版 |
2015/05/28(木) 19:23:08.79ID:S82MiYOL
どこかわからんのでココで。
WordVBAで質問です。

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

ということがしたいですが可能でしょうか。
スタイル名を指定して本文内を検索する、という例が見つからず困っております。
0007デフォルトの名無しさん
垢版 |
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
0009デフォルトの名無しさん
垢版 |
2015/06/15(月) 17:19:16.55ID:pR/1zNa6
>>7
受信したメールを置換ってできないのでは?
置換したファイルをエクスポートするのですか?
0010デフォルトの名無しさん
垢版 |
2015/06/16(火) 22:15:42.00ID:x8vn2cko
すみません、受信メールではなく、作成中のメールです。
PCからガラケーに送ると、Enter改行だと無視されてしまうので、送る前にボタンを押してShiftEnter改行に変えたいのです。
リンク付きでPCの人にも送るので、HTMLメールのまま送りたいので。
0011デフォルトの名無しさん
垢版 |
2015/06/17(水) 02:45:22.84ID:WySeJcTb
>>10
リボンの編集→置換で(ワイルドカードを使用する)^13と^11を指定すればウィンドウからはできましたが、
この機能に該当するメソッドがどうにも探せないですね。
参考にされたコードはワードのものなんですけど、OUTLOOKで使うにはちょっと無理そうです。
0012デフォルトの名無しさん
垢版 |
2015/06/30(火) 10:29:12.58ID:ewTLWEfL
初心者から始め、2年ほど1人でVBA業務をしていたのですが
そろそろ引き継ぎ等も考え、コーディング規約のようなものを作成しようと考えています。
各プログラムで命名規則も違うため、統一したいのですが今ひとつ可読性の高い命名というのがわかりません。
修正前の変数宣言のコードを記載しますので、ぜひ添削していただけないでしょうか。
なお、グローバル変数宣言しているのは当時、この方法が一番良いと思ったためです。
0013デフォルトの名無しさん
垢版 |
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" '変動税率
0014デフォルトの名無しさん
垢版 |
2015/06/30(火) 16:19:51.35ID:GcuTOY9X
>>13
工事をConと省略せずにconstruction_xxxと書くべきだと思うが、それよりもワークシートのセル番地を固定文字列で定義するのはまずいだろう。
一行ずらしましょう、とかするときどうするの?不自由この上ない。
0016デフォルトの名無しさん
垢版 |
2015/06/30(火) 18:04:04.25ID:RGb3IB+F
>>14
セル番地の固定文字列については改めて見るとすごくおかしいと思いました。
修正したいですが、皆さんワークシートやセル番地の定数はどのようにされているのでしょうか。
検索はするものの、なかなか見つけられず困っています。
>>15
気づきませんでした、すみませんありがとうございます。
0017デフォルトの名無しさん
垢版 |
2015/06/30(火) 19:44:23.68ID:4fqzjiG2
セル番地はセルに名前を付ける
列番号はenumにまとめる
シート名はconst
基本適当
0018デフォルトの名無しさん
垢版 |
2015/07/01(水) 22:28:04.95ID:DXkWToqb
一日20項目ほどの数値データが入力されている月報の表を
月末にデータを全て消去して、同じWS上で次月の日付、曜日
の書き込まれた新しいフォームに更新したいのですが、
マクロで実現可能でしょうか?
0020デフォルトの名無しさん
垢版 |
2015/07/01(水) 23:04:39.40ID:DXkWToqb
やってみたけど30日までの月や31までの月などがあって
上手く行かないのです。
0021デフォルトの名無しさん
垢版 |
2015/07/01(水) 23:05:37.19ID:DXkWToqb
どこかにサンプルコードでも落ちてないでしょうか?
0023デフォルトの名無しさん
垢版 |
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
0025デフォルトの名無しさん
垢版 |
2015/07/02(木) 14:46:01.74ID:AbwDTtrn
年月は、ボックスからプルダウンリストで指定
するだけです。ただ、指定年月の1〜月末までの日付、曜日を月報の1.2行目に縦に列記するコードが出来ないのです。
0026デフォルトの名無しさん
垢版 |
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
0027デフォルトの名無しさん
垢版 |
2015/07/02(木) 19:18:37.45ID:zxCnKqA7
何とかできそうです。ありがとうございました。
0028デフォルトの名無しさん
垢版 |
2015/07/02(木) 20:29:21.19ID:Mdba4OI7
>>14
なんやわからん英語で書かれている方がよっぽど分かりずらいので、
あくまでもEXCELマクロで使用するスクリプトなのでコメントに書いている
そのコードを外人に見せるなら英語が望ましいけど、
漢字をそのまま使えばいいかと。
工事名称等は重複してるので、設定_工事名称とかになるんでしょうかねー。

セル番地の固定値を変数で持っているのが引っかかっているみたいですけど、
メンテするときはコードのメンテも込みになるでしょうから、
変数に代入して整理してるし良いのでは?
というか、そういう風にルールを敷けばいいとおもうの。
0029デフォルトの名無しさん
垢版 |
2015/07/03(金) 08:49:41.34ID:IELcwsmr
>>28
全体を一行下にずらす、とかするとき数十個ある変数を個々にメンテするの?
工事_A = "AO1" → 工事_A = "AO2"
工事_B = "AP1" → 工事_B = "AP2"
・・・
0030デフォルトの名無しさん
垢版 |
2015/07/03(金) 14:52:04.92ID:aFtg1Cyl
>>29
それでいいと思うよ
どうやろうとしてるのか知らんけど、この手の奴は分かりやすいのが一番だと思う
0031デフォルトの名無しさん
垢版 |
2015/07/03(金) 16:20:33.62ID:L435uo00
分りやすいっていうか、直接的だから理解はしやすいけど
修正が面倒で間違いも起きやすいね
レイアウト自体の変更ではなく、全体を一気に動かすなら
最初の一要素だけ絶対アドレスで指定して
あとはそこからの相対参照(要するにオフセット)にしておくというのもひとつの手だと思う
それなら1個いじれば全部まとめて直せる
0032デフォルトの名無しさん
垢版 |
2015/07/06(月) 05:20:54.03ID:UMBaWGrv
>>31
数十行にわたるコードのメンテぐらいで不満がある程度なら、
プログラム書くのは向いていないので、長いコードは書かないほうがいいと思う。
あと、ただ一つ変えれば全部まとめて直せるコードでも、
そのコードを知らない他人から見れば、結局全部見ることになると思うよ。
本当にそれでいいのかという部分も含めてテストすることになるから。
で、結局のところ別にどっちでもいいとなる。
0035デフォルトの名無しさん
垢版 |
2015/07/06(月) 17:53:09.90ID:J6N5PkHq
>>32
数十行だろうと数万行だろうと
ひとつの変更で複数の変更箇所が出てくる構造自体のほうが問題だと思うよ

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

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

>>33
いや、だから

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

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

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

それに、全体をずらすってのは>>29の発案であって俺が言い出した話じゃないんで
俺はあくまで他人から与えられた前提条件で考えただけの話
0038デフォルトの名無しさん
垢版 |
2015/07/06(月) 22:43:31.22ID:fhp0P+BJ
>>37
> 仕様変更で項目順の変更とか途中に項目追加とかのほうが多いだろうけど。
普通はそうでしょ?

> 俺はあくまで他人から与えられた前提条件で考えただけの話
あまりない条件だけ考えることになんか意味があるのか?
0039デフォルトの名無しさん
垢版 |
2015/07/06(月) 23:03:55.23ID:J6N5PkHq
>>38
そっちのが多いとは言ったが、全体を動かすのもそれなりにあるって言ってるじゃん
滅多にないとかありえないとかいうほどのレアケースではないよ
0040デフォルトの名無しさん
垢版 |
2015/07/06(月) 23:42:36.40ID:QbnSMTRw
>>39
> ありえないとかいう

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

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

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

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

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

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

になる程度の話でしょ?

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

後任の人があらかじめ何の予備知識もないなら全部の要素を直接指定しているのかそうでないか自体、
少なくともコードを全部読まなきゃ判断できないわけで、それなら相対指定で書いてもおなじことです。
0043デフォルトの名無しさん
垢版 |
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)
・・・
0044デフォルトの名無しさん
垢版 |
2015/07/07(火) 05:48:03.16ID:PlDHyacp
さらに間違ってた
工事_AがRange型ならそれ以降にRange(工事_A)なんて書く必要なかった

まぁ、何も知らずにコードを読んで表のレイアウトを理解できるかどうかとか
表の変更にかかるコストとかには大して影響ない話だけど
0045デフォルトの名無しさん
垢版 |
2015/07/07(火) 07:47:40.19ID:yxtOW/kO
>>42
> どっちにせよレアケースではない

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

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

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

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

セルアドレスなら一目でどこを指してるのかわかるけど、Offset( ) だとちょっと面倒でしょ?
そもそも、自分で間違えてるようじゃ説得力 0 だしね w
0046デフォルトの名無しさん
垢版 |
2015/07/07(火) 08:33:01.57ID:PlDHyacp
>>45
とにかく、コストがさほど変わらん以上、そういうことは重要ではないよね、
って言ってるんだけどそれが論理的に理解できない人なの?

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

あと、間違えたのは夜中にトイレで起きたときに書き込んだからで
たぶんあのときだとどっちで書いても間違えてる
(普段からR1C1形式で書くのでどっちかってーと俺はA1形式のほうが間違える)
0047デフォルトの名無しさん
垢版 |
2015/07/07(火) 08:34:48.94ID:xJTxnmtV
相対座標がどうたらというのは>>31が言い出したことにすぎないし、"AY0"とかいう文字列で指定すること自体がけしからんという意見。
0048デフォルトの名無しさん
垢版 |
2015/07/07(火) 12:53:11.67ID:yxtOW/kO
>>46
> とにかく、コストがさほど変わらん以上、そういうことは重要ではないよね

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

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

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

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

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

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

反論するのは難しくないけどめんどくさいし
貴方にとっても内容を論理的に言うこと以外に自説の説得力を増す手法なんてないよ
0050デフォルトの名無しさん
垢版 |
2015/07/07(火) 16:17:25.40ID:yxtOW/kO
>>49
> レイアウト変更ならどっちもどっち、って話だよ。

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

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

応用力ないの?

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

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

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

> めんどくさいし

君にはレスしないと言う自由があるよ
反論するのも苦労してるみたいだしね w
0051デフォルトの名無しさん
垢版 |
2015/07/07(火) 16:28:56.71ID:PlDHyacp
>>50
>どっちが可読性が高いかとか考えないのか?

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

>レスしないという自由
は確かにあるし
君にも好き勝手な方言を垂れ流す手段(自由や権利ではない)はあるんだけど、
こうやってきちんと反論しといたほうが良さそうなんで仕方ないからそうしてる
0053デフォルトの名無しさん
垢版 |
2015/07/07(火) 17:37:36.10ID:yxtOW/kO
>>51
> うん、だからOffsetのほうが読みやすいよ

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

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

あと方言とか意味不明
もう少し自分の書き込み見直した方がいいんじゃね?
0054デフォルトの名無しさん
垢版 |
2015/07/07(火) 18:35:20.15ID:PlDHyacp
>>53

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

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

変換ミスについてはまぁ申し訳ない、だけどそれは議論の結果には影響ないと思う。
0055デフォルトの名無しさん
垢版 |
2015/07/08(水) 10:49:05.20ID:U80w5CD7
>>54
> それともいちいち「何々の項目はF5だ」とか気にして作業してるの?

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

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

Offset( ) で書くにしても、基準のセルは絶対アドレスで指定するだろ
0056デフォルトの名無しさん
垢版 |
2015/07/08(水) 11:43:46.03ID:KchLLrX8
>>55
まだやるんかw

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

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

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

この判断の優劣・良否・正誤等々については個々人の好みも有るでしょうから
どちらの考え方が優れているとかそういう視点での議論には決着がつかないと思いますけどね。
0057デフォルトの名無しさん
垢版 |
2015/07/08(水) 12:37:46.79ID:U80w5CD7
>>56
> むしろ個々の要素についてまで絶対位置指定などしても可読性が下がるだけです。

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

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

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

だろ

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

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

>>48
> どう書いてもたいして変わらんから、ごちゃごちゃ言い出した >>29 とか >>31 がバカと言う主張なら納得
0059デフォルトの名無しさん
垢版 |
2015/07/08(水) 13:02:19.06ID:KchLLrX8
>>57
>個人の感想です
>って書いといた方がいいんじゃないか

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

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

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

>どう書いても

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

ところで、なんだか無理筋で反論続けてるように見えるのですが大丈夫ですか?
一応、われわれの議論を第三者が読んでどう判断するか
冷静に考えたほうが良いと思いますよ。
0060デフォルトの名無しさん
垢版 |
2015/07/08(水) 14:00:10.16ID:U80w5CD7
>>59
> 書いてますよね?
> R1C1を使い慣れてる人間の意見だって。

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

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

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

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

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

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

鏡見た方がいいと思うよ w
0062デフォルトの名無しさん
垢版 |
2015/07/08(水) 15:39:00.14ID:KchLLrX8
>>60

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

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

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

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

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

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


なお>>61は打ち間違えて送信しちゃいました。
たびたびスマン
0063デフォルトの名無しさん
垢版 |
2015/07/08(水) 19:21:57.08ID:U80w5CD7
>>62
> ですから、>>59とかそれ以前の>>49とか>>54とか>>56とかは
> 全部根拠について書いてるんですが。

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

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

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

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

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

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

またその話?

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

って書かれてますよ。

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

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

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

落・ち・着・け・よ
0065デフォルトの名無しさん
垢版 |
2015/07/08(水) 21:21:46.83ID:KchLLrX8
>>63
>該当の箇所を引用してみて

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

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

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

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

以上、大体全部同じことの繰り返しですが、この辺が俺の主張する可読性に関する意見の根拠です。
本文長すぎるんで続きます。
0066デフォルトの名無しさん
垢版 |
2015/07/08(水) 21:22:59.14ID:KchLLrX8
>>65の続きです
ただ、ここに来て根本的な部分の食い違いを実感してるのですが、

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

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

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

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

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

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

>落・ち・着・け・よ

まぁ、打ち間違いとか変換ミスは良くやっちまうんでスミマセンとしか良いようないけど
重要なのは主張の論旨であってそれは読み手側にある程度の知識があれば
変換ミス程度は何がいいたいのか読解できるだろうからまぁ別にいいかなと思ってます。
0067デフォルトの名無しさん
垢版 |
2015/07/08(水) 21:45:49.65ID:t0H2tWbI
>>65
根拠頂戴って言ったら

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

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

>>66
帳票って見たことないの?
結構スカスカだよ
例えばこんな奴
https://garage.plus.co.jp/guide/estimate/image/egd_itm_1.gif
表の部分は元々複数出力するので VBA でループ回すから位置を変えるのは問題ない
ありがちなのは会社名とか見積もり番号の位置を変えたいとかで、他に影響することはあまりない
0068デフォルトの名無しさん
垢版 |
2015/07/08(水) 22:44:42.67ID:KchLLrX8
>>67
いや、それ言い出したらあなたの主張だって単なる個人の意見ですよ
たとえば帳票はスカスカだってのがあなたの意見なわけですが
そういうのじゃない表だってあるんですよ

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

あなたの主張が普遍的意義を持ってるならともかく、
こういう明らかな反例がある以上、
俺の根拠のみを私的意見だと言い切る資格はあなたにはないです。
0069デフォルトの名無しさん
垢版 |
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
0070デフォルトの名無しさん
垢版 |
2015/07/08(水) 23:43:30.20ID:t0H2tWbI
>>68
> いや、それ言い出したらあなたの主張だって単なる個人の意見ですよ

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

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

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

また...

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

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

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

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

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

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

あと、時系列で入力するってことは複数の行を扱うんだろ?
>>67 にも書いたけどそう言う奴は普通 VBA のループで処理するから、元々絶対アドレス云々の話じゃないと思うんだが
0071デフォルトの名無しさん
垢版 |
2015/07/09(木) 00:51:54.46ID:FZuq59n/
>>70
>これには事実しか書いてない

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

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

念のため指摘しておきますが
パラメータの増減は列方向ですしループ云々とは関係ないですよ
0072デフォルトの名無しさん
垢版 |
2015/07/09(木) 08:21:56.29ID:n0IdOdTN
>>71
> それ以前の前提条件として絶対アドレスを取得する必要があるかどうか

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

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

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

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

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

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

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

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

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

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

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

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

いや、少なくとも行方向はループで処理するから元々絶対アドレスでは無理だろ
そう言う状況なら列側も相対にするのは珍しくない
ただし、今回の話とは状況が違うからあまり参考にならないって話
0073デフォルトの名無しさん
垢版 |
2015/07/09(木) 08:53:31.52ID:FZuq59n/
>>72
>重要だけど不利だからスルーするってこと? w
>そこまで言うなら、どれぐらいあるんだ?
>根拠とともに示してくれよ

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

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

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

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

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

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

それが多いとか少ないとかを論拠にするのは
あなたがきちんと証明してからにしてくださいね
0074デフォルトの名無しさん
垢版 |
2015/07/09(木) 10:18:34.30ID:SLWTmnwe
>>69
> Word VBAで [Shift+Enter] を押したとき、「Chr(11)」が入るみたいだけど、これって何なんですか?

どこでShift+Enterを入力して、それがChr(11)だと確認した方法を教えて。
0075デフォルトの名無しさん
垢版 |
2015/07/09(木) 13:00:12.23ID:n0IdOdTN
>>73
> あなたが具体的な根拠を示してくださいよ

書いてあるでしょ?

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

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

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

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

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

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

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

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

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

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

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

元々、>>13 の話
コメント見る限りは注文書の入力用シートの話であることぐらいは理解しようよ
0076デフォルトの名無しさん
垢版 |
2015/07/09(木) 22:32:24.92ID:UwaB1poA
>>74
wordで文章の途中でShift+Enterを入力して、
文章を全部選択した状態で、
マクロで↓みたいなのやったら置換されました。

Sub ReplaceSample()

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

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

>MSDNだと
そのページはVBAのページではありません
VBScriptで定数vbVerticalTabが使えないと言ってるだけです
0081デフォルトの名無しさん
垢版 |
2015/07/11(土) 03:32:44.18ID:lfRSVC1W
>>80
英語のページだとNot usefulって書いてあるのか
使ってはいけないと言う意味での「使えません」じゃないって事だな
まあ、実際にWordで使ってるんなら使えばいいんじゃね
0082デフォルトの名無しさん
垢版 |
2015/07/11(土) 07:20:42.92ID:SvdcMd32
>>69
なんなですか?
って言われても、VT のコードって言うしかない
そのコードをどのように解釈するかはアプリケーション次第
0083デフォルトの名無しさん
垢版 |
2015/07/14(火) 15:37:53.39ID:8d4NQeRS
>>75
もうやめとけ。
そいつは長いコード書いちゃいけないって俺は言っただろ。
そのうち事故るよ。
0084デフォルトの名無しさん
垢版 |
2015/07/14(火) 20:08:07.90ID:lKDNL4b3
>>81-82
んじゃあ「Chr(11)」はタブ文字 (縦)ってことで、それ以上でもそれ以下でもないということですね。
ありがとうございました。
0085デフォルトの名無しさん
垢版 |
2015/07/27(月) 22:27:48.03ID:FZObgN+M
MSOfficeのパワーポイント2013のVBAについて、助言をお願いします。

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

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

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

よろしくお願いします。
008685
垢版 |
2015/07/29(水) 22:12:54.99ID:JQYDYy2G
すいません、勘違いがありました。問題なく出来ました。
0087デフォルトの名無しさん
垢版 |
2015/08/04(火) 13:20:19.14ID:Xu3GeQZL
OWCのグラフで値が空のとこを非表示にするにはどうしたらいいですか?
0089デフォルトの名無しさん
垢版 |
2015/08/18(火) 16:30:28.51ID:1oq6H4HA
PowerPointでpptxを開いてPDFで保存するvbscriptを
書いたんですが発行中ダイアログが出てしまいます。
これを出ないようにする方法はないでしょうか?
0093デフォルトの名無しさん
垢版 |
2015/08/30(日) 22:49:46.81ID:PtUjiQ8D
>>89
試しにパワポにマクロでPDF出力を作ってみましたが
別に何も出ませんでしたよ?
Office2013ですけど。
0094デフォルトの名無しさん
垢版 |
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
0095デフォルトの名無しさん
垢版 |
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

ぜんぜん見当違いだったらごめんなさい
009695
垢版 |
2015/09/04(金) 09:05:49.13ID:RG/2/qam
>>94
よくみたら組み込み定数じゃなくて変数で宣言してましたね
見当違い以前のはなしでした
本当にごめんなさい
0097デフォルトの名無しさん
垢版 |
2015/09/05(土) 19:56:12.09ID:852S1qdl
>>94
93ですけど、そのソースをコピペしてコマンドプロンプトから
実行してみましたが、家の環境(Win10)では普通にPDFできますよ?
ダイアログも出ませんでしたよ。
実行した時はスライド1枚の軽いPPTでやったのですが、
94さんは、もしかしたら結構スライド数多いPPTだから出るんですかね?
0098デフォルトの名無しさん
垢版 |
2015/09/05(土) 20:01:53.43ID:852S1qdl
出てるダイアログが再現できないので、わからないのだけれども
↓のプロパティでどうにもならないんだとしたら、諦めるしかないのかも。
Application.DisplayAlerts
ttps://msdn.microsoft.com/ja-jp/library/office/ff746503(v=office.15).aspx
0099デフォルトの名無しさん
垢版 |
2015/09/07(月) 12:54:20.03ID:NloI4YQK
>>97
スライド数は20くらいでしょうか。
>>98
試してみましたが残念ながら出てしまいました。
困りました。
0100デフォルトの名無しさん
垢版 |
2015/09/08(火) 02:01:39.32ID:m7aBfM8f
Windows10でie操作のマクロって動くのですか?
edgeは互換性あるわけでは無いですよね。
別にインストールするのですしょうか。

これでクリエイトするオブジェクトです。
CreateObject("InternetExplorer.Application")
0101デフォルトの名無しさん
垢版 |
2015/09/08(火) 12:06:16.04ID:9vjtcLlt
Windows10でもieは入っているようです
ttp://simply-assi.com/windows10ie/

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

Windows10持ってるなら テストしてみるべし
自分は Win8.1だから無理だけど
0102デフォルトの名無しさん
垢版 |
2015/09/08(火) 14:37:39.47ID:m7aBfM8f
>>101
自分も実機がないのよね。
ieが残ってるいうのは聞いてるんだけど、7や8からのアップデートでも、10のクリーンインストールでも何の設定もしないでも動くのかなと。
テストしてる人とかいないかな?
0104デフォルトの名無しさん
垢版 |
2015/10/07(水) 06:57:36.90ID:qdqRCjiZ
受ける会社大丈夫?
下記の条件が全て当てはまる会社にご注意下さい。

・IT系 in tokyo
・「社名 労基」でググると過去の2chスレが出てくる
・転職会議で2.5点
0109デフォルトの名無しさん
垢版 |
2015/10/12(月) 23:40:07.79ID:Xy8ebFp6
>>107
>>105は1枚めの画像を左に90度回転させ2枚めの画像としています。
現在、エクセルで1枚目のようなグラフがあるのですが、
縦軸と横軸を入れ替えたような(2枚目画像のような)グラフをエクセルで作りたいのです。
自分なりにいろいろ試したのですができませんでした。
0111デフォルトの名無しさん
垢版 |
2015/10/13(火) 00:02:52.88ID:X9js2iKE
>>110
ああ、ごめんなさい。
>>105の2枚目の画像は1枚目の画像を画像ビューワーソフトで左回転させたものなんです。
2枚目のようなグラフをエクセルで作成したいんです。
(今は1枚目のようなグラフをエクセルで作った段階です)
0113105
垢版 |
2015/10/13(火) 18:10:14.52ID:X9js2iKE
改めて質問させてください。

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

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

わかりづらくてすみません。
0115105
垢版 |
2015/10/13(火) 21:52:53.15ID:X9js2iKE
>>114
今エクセルを試せる環境ではないので検索してみた結果を眺めたところ、
線グラフや面グラフの縦軸と横軸の反転は非常に難しそうな印象を受けました。
難しいというか無理やりというか。
そこまでの労力をかけないと望む結果が得られないということはなんとなくわかりました。
そうであるならば現状を受け入れるしかないのかと思っております。
今回は諦めます。ありがとうございました。
0117デフォルトの名無しさん
垢版 |
2015/10/13(火) 23:07:15.46ID:/7qkRhU+
>>113
Excelの質問かよ…
じゃあなんでExcelの質問スレじゃなくてここで質問するんだ
後出し条件出してくんなカス
0119デフォルトの名無しさん
垢版 |
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
0121119
垢版 |
2015/10/29(木) 03:59:21.10ID:l3n8K/Sw
>>120
値は取得できてます。
これが本当にメッセージのハンドルなのか調べ方を知らないので合ってるかは分かりません。
FindWindowも間違ってないと思うのですが、こちらも調べてみます。
0122デフォルトの名無しさん
垢版 |
2015/10/29(木) 21:40:45.69ID:Q2L1bFVS
WM_COMMANDの右2つの引数の指定の仕方が間違ってるのと
有効なウィンドウハンドルかどうかはIsWindowで取得できる
0123119
垢版 |
2015/10/30(金) 00:47:33.04ID:ZHFQ9n4z
Rtn = SendMessage(hWnd, WM_COMMAND, 2, 0)

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

>>122さんレスありがとうございます。
0124デフォルトの名無しさん
垢版 |
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でも変わらず)
0125デフォルトの名無しさん
垢版 |
2015/11/03(火) 19:21:14.85ID:elW9O1dh
パワポでソフトトーク使いたいんだけど『開発』タブ出すところまではできてもVBAでマクロを記述〜っていうのができない。インポートするファイルの在り処か作成法を情弱にも理解できるように教えてほしい…
0126デフォルトの名無しさん
垢版 |
2015/11/03(火) 19:22:51.42ID:elW9O1dh
参考にしてるのはこれ。
パワポも2ちゃんも初心者でごめんなさい…
http://needtec.exblog.jp/18919344/
0128デフォルトの名無しさん
垢版 |
2015/11/04(水) 15:38:11.36ID:DjYXAcy0
127
Visual Basicのウィンドウは出てきたしテキストもコピペしたけど
wavが自分のファイルに保存されない。
マクロ実行しても何も起こらずウィンドウが閉じるだけ。パワポのファイルにも音源は見当たらない。
0129デフォルトの名無しさん
垢版 |
2015/11/04(水) 15:56:19.21ID:Y61Iie1f
>>124
1点目はソースがないとなんとも。

2点目はHTMLDocumentあたりで定義したオブジェクト(変数?)にSetしてやれば参照できるよ。
理由はしらんがie.Documentみたいなままだと参照できない。
0130デフォルトの名無しさん
垢版 |
2015/11/04(水) 21:25:56.71ID:NpxeN+NQ
>>128
何をしてどうなったのか具体的に書いてもらわないとわかりません
パワポにマクロを組み込んで、softTalkのパスを指定して
スライドのノートに文章を書いて、マクロ実行、までは出来たという理解でOK?
0131デフォルトの名無しさん
垢版 |
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タグとどうに関係しているのかわからず詰まっている状態です。
0133デフォルトの名無しさん
垢版 |
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

でクリックできた。
そちらのサイトでも動くんでないか?
0134デフォルトの名無しさん
垢版 |
2015/11/05(木) 21:56:35.78ID:CDrat58l
パワーポイントで、すべてのシートについて青い文字だけを黒い文字に変換するようなマクロを
作っていただけないでしょうか。
0135デフォルトの名無しさん
垢版 |
2015/11/05(木) 23:31:33.31ID:5frd9spB
>>132
アドバイスいただいた方法で出来ました!
div要素をclick出来るとは思っておりませんでした。
本当にありがとうございます。

その後の処理も上で>>119さんのやりとりから調べて目的とする動作が出来ました
合わせて感謝します。
0137124
垢版 |
2015/11/06(金) 07:09:49.59ID:I5IXDGW5
!Σ(・ω・ノ)ノ
お礼伝わり良かったですw
0138デフォルトの名無しさん
垢版 |
2015/11/08(日) 22:46:51.63ID:yp780VFR
access2013でフォームからの入力期間の金額を集計してレポート作成をしようとしています。
vbaでレポートボタンを押下した動作と同じコードは存在しますでしょうか。
0139デフォルトの名無しさん
垢版 |
2015/11/09(月) 00:38:10.22ID:lpQ26d6h
レポートボタンってのが何の事かわからんが DoCmd.OpenReport使えとかそういう事か?

とりあえずACCESS VBAはそれ用のスレがあるからそっちで聞け
0140デフォルトの名無しさん
垢版 |
2015/11/09(月) 02:05:47.54ID:rGXYqJ1u
>>134
すべてのシートの、
すべてのテキストの文字色を、一つずつ調べていき、
(または、1文字ずつ調べながら、)

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

音声ファイルの圧縮がやりたいのです。
0142デフォルトの名無しさん
垢版 |
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
とまとめたいのですが、どのように処理すればよいでしょうか?
いずれは金額も考慮したいと考えていますが、現段階では難易度を下げるために同一金額としてください。
同じ理由でここでは頭を固定で例を作成させていただきました。

よろしくお願いします。
0144デフォルトの名無しさん
垢版 |
2016/02/24(水) 22:39:06.06ID:faCUrUaa
>>143
他にそれらしいスレがみつからなかったことと、この買い目を出す処理をVBAで行っているのでここで聞いたのですが
適切なスレがありましたら移動しますので、誘導願います
0146デフォルトの名無しさん
垢版 |
2016/02/24(水) 23:07:19.07ID:gEXn5/E8
でもEXCEL VBAに行ったほういい気がする
どうせEXCELだろ
0148142
垢版 |
2016/02/27(土) 08:28:02.19ID:SRIIhbK2
>>147
了解
0152デフォルトの名無しさん
垢版 |
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>
0153デフォルトの名無しさん
垢版 |
2016/03/18(金) 01:48:30.33ID:emFx7ejn
>>152
vba xml 生成 とかでググるといくらでもやり方はヒットすると思うけど
具体的にどんなコードのどこで行き詰まってるのか書いてくれないとアドバイスしようがない
0154デフォルトの名無しさん
垢版 |
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>
0155デフォルトの名無しさん
垢版 |
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 = "パパス"
0156デフォルトの名無しさん
垢版 |
2016/03/19(土) 11:15:23.76ID:LxdobWB2
ThisWorkbook.Save
で「指定したディメンションは、このグラフの種類では無効です。」のエラー発生。
エラーが出るときと出ないときがある。

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

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

エラー回避する方法を教えて下さい。
0157156
垢版 |
2016/03/19(土) 11:26:07.75ID:LxdobWB2
>>156はエクセルの話です
win7, office2010
0159デフォルトの名無しさん
垢版 |
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

その辺は大丈夫?
0163デフォルトの名無しさん
垢版 |
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
0164デフォルトの名無しさん
垢版 |
2016/03/24(木) 12:50:23.33ID:FJvNCHp3
>>156
「vba 指定したディメンションは、このグラフの種類では無効です。」で検索!

>>163
「vba オートメーションエラー」で検索!
0165デフォルトの名無しさん
垢版 |
2016/04/09(土) 01:33:44.74ID:8VJ1WNjN
Declare 文でDllを指定するとき、絶対パスを指定するのとしないので挙動が変わるなんてことありますかね?

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

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

Window7、Excel2010(64bit)です。
0166kio
垢版 |
2016/04/09(土) 09:27:26.96ID:OaMx2gZN
下記プログラムでデータ貼り付け可能ですが、
Range(
0167デフォルトの名無しさん
垢版 |
2016/04/09(土) 10:55:02.62ID:uD9Ltjj7
>>165
なんで大事な部分を書かずに濁すの?
0171デフォルトの名無しさん
垢版 |
2016/04/09(土) 12:35:11.85ID:lZD29UWG
性別と容姿じゃね?
0172デフォルトの名無しさん
垢版 |
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ファイルを
指しいてるのは間違いないと思います。
0174デフォルトの名無しさん
垢版 |
2016/04/09(土) 16:55:41.43ID:DA1syyI4
>念のため他のフォルダに同名のDllがないか確認しましたが、そんなものはありませんでした。
限りなくこれが怪しいと思うんだが
0176デフォルトの名無しさん
垢版 |
2016/04/09(土) 18:20:08.40ID:uD9Ltjj7
>>165
挙動が変わることはあります。
おわり
0177デフォルトの名無しさん
垢版 |
2016/04/09(土) 18:32:34.00ID:8VJ1WNjN
>>175
パスが通っている全フォルダとカレントフォルダからの目視です。

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

問題のfuncABC も GetEnvironmentVariableA も同じVBAから発行しています。
0178デフォルトの名無しさん
垢版 |
2016/04/09(土) 18:41:03.58ID:DA1syyI4
カレントフォルダをどうやって確認したかとか
システムディレクトリにdllがないかとか

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

>>176
マジですか...
0181デフォルトの名無しさん
垢版 |
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
0186デフォルトの名無しさん
垢版 |
2016/04/09(土) 21:43:59.08ID:YC7vrxdl
>>179
> 目視も検索フィルタにとりあえず *.dll で全DLLを出してからやっています。
プログラマーに向いてないんじゃね?
コマンドプロンプトで
dir /s /b \ABC.dll
ってやればいいだけだろ
0187デフォルトの名無しさん
垢版 |
2016/04/09(土) 23:15:48.61ID:8VJ1WNjN
>>180
ODBCのコネクションを張る関数で、特に自分の場所が関係する処理はしてないですね。

>>181-186
全ドライブを検索した結果(search everythingは入れてませんが dir/s はやってみた)
C:\Users\*****\Google ドライブ\
に見つかりました。
しかし、これを消しても現象は変わらなかった(もともと参照パスに入ってない)ので、諦めの気分です。
0188デフォルトの名無しさん
垢版 |
2016/04/10(日) 00:12:20.49ID:TaPFtU7E
元々の質問は、挙動が変わることがあるか?で、
あるって回答で解決だと思うけど、どうしてもないってことにしたいの?
ゴールが見えないよ
0189187
垢版 |
2016/04/10(日) 00:39:39.00ID:9vV3r8su
>>188
あるって回答(>>176)もあり、ないって回答(>>180)もありで、判断がつかない状況です。
0190187
垢版 |
2016/04/10(日) 00:47:04.09ID:9vV3r8su
それと、>>173>>176もいまいち理解できておりません。
「dllのパスを取得」とは、実際の存在はひとつでもDeclare文での指定のしかたまでも検知できるんでしょうか?
0191デフォルトの名無しさん
垢版 |
2016/04/10(日) 01:04:43.27ID:9zYVMe1H
まさか、パス・ユーザー名など、システムに関係する部分に、
日本語を使ってないだろうな?

それで、バグってるとか?
0192187
垢版 |
2016/04/10(日) 01:08:14.87ID:9vV3r8su
>>191
ないですね
0193デフォルトの名無しさん
垢版 |
2016/04/10(日) 01:14:27.05ID:9zYVMe1H
そのDLLの作者が外人で、DLL内で、パス・ユーザー名を扱っていた場合、

もしその中に日本語が入っていれば、バグるかも
0194デフォルトの名無しさん
垢版 |
2016/04/10(日) 01:22:30.64ID:9zYVMe1H
>>187
>ODBCのコネクションを張る関数で

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

絶対パスを使えばいい
0195デフォルトの名無しさん
垢版 |
2016/04/10(日) 05:47:22.16ID:v52RcnsN
>>187
> 特に自分の場所が関係する処理はしてないですね。
ん?
自分で作った dll なの?
だったら自分でデバッグしなよ
0196デフォルトの名無しさん
垢版 |
2016/04/10(日) 10:59:47.17ID:KR5BT3Be
全ドライブを検査してひとつしかdllファイルがなかったって言ってるんだろ。
それが本当なら何も対処できないよ。OSレベルの不具合。
0197デフォルトの名無しさん
垢版 |
2016/04/10(日) 17:49:12.01ID:r0zhudqC
VBAをコーディングするのに最適な画面サイズとモニターの台数は何台ですか?
縦と横どっちでつかってすか?
4Kディスプレイはどうですか?
0199デフォルトの名無しさん
垢版 |
2016/04/10(日) 19:33:25.31ID:Y5yf6QHK
>>197
3台

4Kいいよ
0200デフォルトの名無しさん
垢版 |
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
0201デフォルトの名無しさん
垢版 |
2016/04/28(木) 00:18:56.90ID:Vq22azhO
>>200
可能です
0203デフォルトの名無しさん
垢版 |
2016/04/28(木) 08:26:47.90ID:RqXO/zBw
>>202
具体的にあなたが躓いているところがわかりません
0204デフォルトの名無しさん
垢版 |
2016/04/28(木) 12:27:24.37ID:xB9gNSEq
>>203
具体的にあなたが何がわからないのかわかりません
0205デフォルトの名無しさん
垢版 |
2016/04/28(木) 12:29:10.17ID:gq5pmM2C
>>200
For Eachで全シートループして、各シート最終行取得して貼り付ければ良いと思いますが、ダメですか?
0207デフォルトの名無しさん
垢版 |
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的に分散され、特定のサーバーに依存しません
0208デフォルトの名無しさん
垢版 |
2016/05/01(日) 23:24:37.04ID:u17iQe5m
EXCELのVBAでメール返信(OUTLOOK)をする仕組みを作りたいのですが、
元メールを引用するにはどうしたら良いでしょうか?
タイトルやらアドレスやら本文がくっついてないと、
どうも返信感がでないと思いまして。
0209デフォルトの名無しさん
垢版 |
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
0210デフォルトの名無しさん
垢版 |
2016/06/04(土) 14:31:26.42ID:ZLbjql14
Excel向けだとVBA関連の本は結構あるのにOutlookのVBA本って
あんまり無いですね。
Outlookの仕分け機能では宛先とCCに○○から来た時に動作する
条件を付けられますが、宛先○○から来た時には動作するけど
CCに何か入っていた場合は動作しないマクロは作れないでしょうか。
環境はWin7、Outlook2010です。
0213デフォルトの名無しさん
垢版 |
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
0214デフォルトの名無しさん
垢版 |
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
0215デフォルトの名無しさん
垢版 |
2016/06/14(火) 02:34:53.84ID:2DTiTbF7
vbaでshell関数を使って指定パスのエクスプローラをファイル選択状態で開いてるのですが、
家でやると何でもないのですが、会社でやると、その方法で立ち上げたエクスプローラは
1分〜数分以内に「エクスプローラは停止しました」となって落ちます。そのフォルダだけ
落ちるので他のは巻き込まれないだけマシですが、手動で立ち上げた他のエクスプローラで
このように不意に落ちた事はないので、プログラムから立ち上げたエクスプローラが特別
不安定だとしか思えないのですが、原因が不明です。
それで、家と会社の違いは、会社だと共有フォルダを開いている事です。
家ではテスト環境をローカルで構成している為か、全く問題は起きません。

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

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

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

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

その共有フォルダへのショートカットを作って
それをshell関数を使ってexplorerで開いてみるとかは?
0217デフォルトの名無しさん
垢版 |
2016/06/14(火) 08:10:13.51ID:BcKyLCvc
手動で起動したプロセスは、親プロセスが無く、単独のプロセスだから、ずっと生き残るのかな?

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

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

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

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

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

なのでとりあえずShell関数を、Wscript.ShellのRunメソッドの同期処理に置換えてみました。
それで明日会社でテストしてみます。
0220218
垢版 |
2016/06/16(木) 07:48:37.40ID:MO4h1nff
>>219
同期処理に変えたら全く落ちなくなりました。
どうやら推測は当たったみたいです。

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

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

とりあえずは解決です。皆さんどうも有難うございました。
0221デフォルトの名無しさん
垢版 |
2016/06/16(木) 14:05:29.72ID:tOwQ8tvq
タイミングの問題で、バグが起きるときは、

sleep 3秒などで、時間稼ぎすることが多いな
0222デフォルトの名無しさん
垢版 |
2016/06/16(木) 16:27:03.77ID:YtVxucfB
>>221
タイミングというか処理を待ち合わせる必要があるって事だよな
3秒で完了しない処理だと問題が起きる
90%くらい解決出来れば実用上は問題にならないかも知れないけど
0224デフォルトの名無しさん
垢版 |
2016/06/16(木) 21:53:33.23ID:EpEOLr57
>>223
何のキャッシュか判らないけど
キャッシュをフラッシュするインターフェイスがあればそれを使えば良いのでは
無いなら知らない
0225デフォルトの名無しさん
垢版 |
2016/06/17(金) 01:16:02.29ID:Sh+IdTol
起動方法と起動のタイミングの問題で
>1分〜数分以内に「エクスプローラは停止しました」
>場合によっては20分くらい経ってからクラッシュ
のような症状が出るとは考えにくいけどな

まあ、直ったって言うならそれでいいけど
0227デフォルトの名無しさん
垢版 |
2016/09/28(水) 19:27:48.59ID:BVBInYIb
vbaの And, Or って短絡評価してくれないの???
0229デフォルトの名無しさん
垢版 |
2016/09/28(水) 22:20:25.14ID:w7cfX4QA
X(n) And Y(m) で X(n) = False だった場合、Y(m) は評価しなくても式が False と確定する
Or でも同様のことが可能

VBAがショートサーキットしているかどうかは、各関数で Debug ログを出力してみればわかる
0231227
垢版 |
2016/09/29(木) 08:22:26.74ID:l2tsRcXf
くぅ。
短絡評価してくれるもんだと思って、
True, False, Nullを返す関数の結果で、
NullをFalseに倒したくて、
左辺でNot isNullやってたけど、
右辺もNullで動いてしまってエラーになってはまったわ。
0233デフォルトの名無しさん
垢版 |
2016/10/06(木) 19:51:33.65ID:prbbit7d
.NetならOrElseやAndAlsoが使えるし
Nullable指定も出来るから便利なんだけどなー

まあ無いものねだりしても始まらないか
0234デフォルトの名無しさん
垢版 |
2016/10/08(土) 17:43:11.29ID:fiaM9vLl
VB(A)はWithとかある割にそういうとこは全然気が利かないよな
C言語すら知らない人が作った言語なんだろう事は判る
0235デフォルトの名無しさん
垢版 |
2016/10/08(土) 22:59:38.27ID:315EhZFM
VBって元々はMSじゃないんだよね BASIC好きのゲイツが惚れ込んで買収しただけ
0237デフォルトの名無しさん
垢版 |
2016/10/27(木) 21:44:23.99ID:BIHhfe0H
漠然と「VBAの初心者向けの本を教えてください」ってのはよくあるが、上級者向けは珍しいね
ある程度基礎が身に付き、やりたいことが分かってきていれば
○○に関する本、ってなるように思うんだが・・・

田中亨氏の「Excel VBA 逆引き辞典パーフェクト 」は名著だよ
0238デフォルトの名無しさん
垢版 |
2016/10/28(金) 04:23:54.86ID:s9odN72t
>>237
ありがとうございます。
クラスや多段階配列、イベント自作、擬似コントロール配列あたりの情報がある書籍はありませんか?
0239デフォルトの名無しさん
垢版 |
2016/10/28(金) 15:06:05.95ID:Sg+Wt/Uz
アプリ作成で学ぶExcel VBAプログラミングユーザーフォーム&コントロール(横山達大著)
かんたんプログラミング 応用編(大村あつし著)
同じく、かんたんプログラミング コントロール関数編

デバッグ関連だと
立山秀利著の本
0240デフォルトの名無しさん
垢版 |
2016/10/29(土) 23:22:10.90ID:b3lytwnZ
VBAでコードを抜き出してSVNやgitで管理したりするとそれだけで上級者っぽくなる
0241デフォルトの名無しさん
垢版 |
2016/10/30(日) 08:10:21.54ID:R4QvvoTp
それ以上にバカっぽいけどなw
0244デフォルトの名無しさん
垢版 |
2017/02/06(月) 12:06:59.89ID:1XFRepCN
PowerPointのVBAでファイルを閉じた後も変数の値が保存されるようにしたいんですが外部のテキストに書き出す以外にファイル本体にどうにかして埋め込む方法はありますか?
0245デフォルトの名無しさん
垢版 |
2017/02/06(月) 14:57:53.43ID:atuXlQHb
透明のシェイプとかに書くとか色々あるけど
実際本体ファイルを更新されるとバージョン管理とか使う側が気持ち悪がるとか運用面で問題が出そう
0246デフォルトの名無しさん
垢版 |
2017/02/06(月) 19:29:23.46ID:4FxLnD3n
Excel脳っすなぁ
標準的なユーザーデータ保存場所がちゃんとあるんだからそれ使えばいいじゃん
0250デフォルトの名無しさん
垢版 |
2017/02/07(火) 07:27:10.54ID:ff698yUf
>>249
条件って
ファイル本体に埋め込みたい
ってことだろ
>>246 の保存場所がどこの事を言ってるのかよくわからんが >>245 より >>248 の方がはるかにマシ
0251デフォルトの名無しさん
垢版 |
2017/02/07(火) 07:40:32.09ID:xddq+MTq
ファイル本体に埋め込みすんのがアホなんだよわかれよ素人
ゴミを量産して人に迷惑かけないでくれ
独りよがりの仕事してんじゃねえよ
0253デフォルトの名無しさん
垢版 |
2017/02/07(火) 20:25:02.30ID:1dqSFjs6
実際に仕事してるとそれこそ基地外避けを作る必要が出てきたりするんだよな
0256デフォルトの名無しさん
垢版 |
2017/02/13(月) 17:14:33.92ID:QPcPOced
50枚のスライドが入ったパワポが5個あります。
これを統合したいのですが
ファイル1の1枚目
ファイル2の1枚目
ファイル3の1枚目
ファイル4の1枚目
ファイル5の1枚目
ファイル1の2枚目。。。

という順番にしたいのです。
どういうマクロを書けばいいでしょうか?
0260デフォルトの名無しさん
垢版 |
2017/02/14(火) 01:58:27.90ID:ahDpDw9M
ExcelVBAをつかいこなしていても
パワポはマクロの記録がないと腰が重いな
0261デフォルトの名無しさん
垢版 |
2017/02/15(水) 08:18:34.60ID:uIQboeV9
>>256
この作業用を何回も繰り返さないといけないの?
1度きりならあなたの場合は手作業の方が早い気が
0262デフォルトの名無しさん
垢版 |
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(新規のファイル)
0263デフォルトの名無しさん
垢版 |
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
0264デフォルトの名無しさん
垢版 |
2017/02/23(木) 14:40:32.47ID:bekNjoMq
>>263
再計算とイベントも停止してみた?
あと、コレクションに対するループの中で自分自身のコレクションが変化するのは、なんとなくまずい気がする
根拠はないけど、それって遅くなる要因と違う?
0265デフォルトの名無しさん
垢版 |
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

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

選択されているShapeの下のRangeの内容を削除したいならshp=Selectionの場合に
Range(shp.TopLeftCell,shp.BottomRightCell).ClearContents
で良いんじゃ?
0268デフォルトの名無しさん
垢版 |
2017/02/23(木) 15:24:01.29ID:5OVH7aZj
>>265
質問者じゃないけど変わって説明するよ
・シート上に文字と図形が複数箇所に設定されている
・消す範囲を選択して、その範囲内の文字と図形を消すコードを書いた
・でもなぜか遅い

質問者に言えるのは、
・Selection.ClearContentsはfor eachの外でいい
・試しに100個のshapeを貼り付けて50個くらいが入る範囲を選択して消してみたら一瞬で終了(もちろんコードでだよ)
・遅いって具体的にどれくらいなの?
0269デフォルトの名無しさん
垢版 |
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

じゃ駄目なの?
0270デフォルトの名無しさん
垢版 |
2017/02/23(木) 16:07:14.86ID:xPy6pfR0
今までは長い時で1〜1.5秒程止まっていました
>>268さんの言われた通り、Selection.ClearContentsの位置を変えたらスムーズになりましたのでこれで行こうと思います
たくさんご意見頂きありがとうございました
0272デフォルトの名無しさん
垢版 |
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\"の部分をフォルダ選択できるようにできるのでしょうか?ご教示お願い致します。
0273デフォルトの名無しさん
垢版 |
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"

じゃないかな?
あと
元コードもそうだけど
フォルダ内に その画像ファイルが存在してなかった時の対策も必要だと思うよ
同じエラーになるぞ それとも絶対 あるのが 確定してる?
0274デフォルトの名無しさん
垢版 |
2017/02/26(日) 16:45:49.33ID:nMuhJunv
>>273
大変ありがとうございます!
ただ、貼り付ける画像は複数あり、貼り付けるたびにフォルダ選択画面が出てしまいますので、一気に貼り付けられないものでしょうか?
ファイルが存在してない時の対策は、セルの状態を色変えて罫線で斜線を挿入したいと考えてますが、まだそこまで進む前段階がクリアできないので困ってます
よろしくお願いします
0275デフォルトの名無しさん
垢版 |
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
0277デフォルトの名無しさん
垢版 |
2017/03/06(月) 23:29:36.96ID:QCgyLcj6
こんにちは。

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

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

2013ではできないけど2016ではできる等の情報もあればお願い致します。
0281デフォルトの名無しさん
垢版 |
2017/04/09(日) 15:56:17.26ID:9WwYB+FH
VBAの変数の値を次回の処理を行う時まで記録しておくのにセルに書き込みをしたりしていますが、

セルにアクセスするのを減らすためにセルに記録しなくて処理終了時に変数値をVBA内で保存しておいてくれる一次記憶領域みたいな物はないのでしょうか?
0282デフォルトの名無しさん
垢版 |
2017/04/09(日) 16:02:56.39ID:9WwYB+FH
ちりも積もればの話ですが
足し算引き算割り算レベルの計算をセルに関数を割り当てて行うのと
同じ計算式を変数を用いてVBAで書いて実行するのとで、より処理速度が速いのはどちらでしょうか?
0283デフォルトの名無しさん
垢版 |
2017/04/09(日) 16:09:57.30ID:Lq/WJuQk
>>281
セルでいいんじゃないの?
ただそのIOは配列アクセスを使うべき
ループで1セルづつ読み込むとかがナンセンス
0284デフォルトの名無しさん
垢版 |
2017/04/09(日) 16:14:42.36ID:K8MFArI9
>>281
説明がいまいち分かりにくい。
次回ってのは何時のことを言ってる?
グローバルな変数じゃダメなの?
次にそのブックを開くまで保持したいならセルってのも分かるんだが。
で、その場合にセルの代わりに保持したいならCustomDocumetProperties使ったりするかな。
0285デフォルトの名無しさん
垢版 |
2017/04/09(日) 16:27:32.06ID:9WwYB+FH
>>283
ありがとうございます。
>配列アクセス
勉強してみます。

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

グローバル変数に代入した数値は処理を中断しても生き続けるのであればそれで解決しそうです。
0286デフォルトの名無しさん
垢版 |
2017/04/09(日) 16:44:07.10ID:9WwYB+FH
>>284
プロシージャの上に定義すると処理が終了しても最終定義された内容は残ったままなんですね!
今まで処理を中断する必要がある場合は変数をすべてセルに書き出していましたが大発見です。ありがとうございました。
0287デフォルトの名無しさん
垢版 |
2017/04/09(日) 19:39:59.08ID:9WwYB+FH
Public変数もしくは通常の変数の指定数の限界はあるのでしょうか?
問題なく動くレベルは何個ぐらいでしょうか?

50個
100個
1000個
10000個でも平気だっり?
実は
100000個以上でも問題ないとか?
0289デフォルトの名無しさん
垢版 |
2017/04/09(日) 23:55:43.90ID:K8MFArI9
>>287
グローバル変数(Public)は便利に見えるけどスコープを考えて必要無い所では使わない方が良い。
PublicかPrivateかプロシージャ内で宣言するかを意識して使った方が良いね。
0290デフォルトの名無しさん
垢版 |
2017/04/10(月) 02:47:06.39ID:AhmZ51rM
日曜の午後からずっとVBAを書いてるけどまだおわらね〜
てかやればやるほど選択肢が爆発的に増えてきて一生かかってもおわりそうにね〜!w
0292デフォルトの名無しさん
垢版 |
2017/04/11(火) 00:40:18.97ID:egN7ZnVO
素数や組み合わせ爆発のような数学の迷宮的な問題に陥って
一生かかってもコードを完成させるのは無理ですよみたいな場合もあるのでしょうか?
0293デフォルトの名無しさん
垢版 |
2017/04/11(火) 10:41:22.79ID:Ei1BFwyD
>>292
数学的バックグラウンドがなければコードが書けないという類いの問題はあるね。
たとえばNP困難なやつ。
巡回セールスマンとかナップサック問題とか、ナーススケジューリング問題とか。
自力でなければ、それなりの回答が得られる解法(コード)が既に存在してるものもある。
0294デフォルトの名無しさん
垢版 |
2017/04/11(火) 11:01:45.96ID:o/k96Ri6
問題を解く方法を考案するのと、その方法をコンピューター言語に翻訳する作業は別ですわ
それぞれに異なった知識と才能が必要となりますので
0297デフォルトの名無しさん
垢版 |
2017/04/20(木) 23:26:11.80ID:92wBssf5
テストしてみたがパブリック変数500個は問題なく動いた。
もっと使ってる人いる?
0299デフォルトの名無しさん
垢版 |
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」 と表示されますみたな、、 
0300デフォルトの名無しさん
垢版 |
2017/04/21(金) 21:28:31.62ID:BWuBR5xw
>>299
最終的には
aaa1=「例文1」
aaa2=「例文2」
aaa3=「例文3」


とし
aaa & no のno番号だけ差し替えて制御するみないな感じで使います。
ただしnoの番号は連続した数字ではなく他の集計結果からランダムに発生するため
ループ処理等では成り立たず変数のように扱う必要があります。
0301デフォルトの名無しさん
垢版 |
2017/04/21(金) 22:10:11.53ID:9tskJEPF
>>300
aaa1とかaaa2を変数として捉えず、文字列と数値を要素に持つ2次元配列と見れば良い
で、データ全体を制御するときは、aaa1,aaa2...の2次元配列全てを要素として持つコレクションオブジェクトを生成して操作する
0304デフォルトの名無しさん
垢版 |
2017/04/21(金) 23:24:44.93ID:3F+Ljh12
そういう質問、初心者によく聞かれるわ
普通は配列を使えと教えるもんだが
0305デフォルトの名無しさん
垢版 |
2017/04/22(土) 06:16:50.97ID:zUhE/Mll
>>302
>>301
ありがとうございます。Collection Dictionary 調べてみましたが
どちらも説明をざっと読んでも使い方が理解できませんでしたが挑戦してみます。

phpのように (aaa & no) =
と変数名自体を複数の変数で合成する事は出来ないのですね。
0306299
垢版 |
2017/04/22(土) 08:27:20.54ID:zUhE/Mll
>>300
>>301
>>302
>>304

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


すみません説明を単純にするために「例文1」としてましたが
変数に格納されるのは状況に応じて変化する数値(他の集計の計算結果)でした。
固定された文言であればDictionary keyで処理できるというのはわかりましたが
格納されている物が変化する数値の場合かつ
変数名を数字で管理(他の集計から3という結果が出たら→aaa3が適応されるみたいな)
したい場合こういうことを実現する方法はありますでしょうか?
0307デフォルトの名無しさん
垢版 |
2017/04/22(土) 08:53:12.92ID:MM2jcjjz
>>306
変数名を数字だけで管理する方法はない。
VBAの仕様上、できない。

というか、その集計結果なるものがプログラム実行時に決定するのだとしたら、集計結果を格納する変数の名前に集計結果の数値をはじめから盛り込もうとするのは無理があるし、そもそも理由が分からない。
やりたいことを実現するにはもっと適切な他の方法があるんじゃないかな。
0309299
垢版 |
2017/04/22(土) 15:29:06.19ID:zUhE/Mll
>>308
>>307
理解するのにかなり時間がかかりましたがDictionaryなんとなくわかりました。
これって Dim とかPublicとかの変数とは別に存在できるんですね。
全く未知の分野ですが使ってみます。ありがとうございました。
0310デフォルトの名無しさん
垢版 |
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で指定した"キー"と "アイテム"は処理が終了するとリセットされるようですが、
グローバル変数のように処理が終了しても次実行されるまで記憶させておくようにする事は出来ないのでしょうか?
0311デフォルトの名無しさん
垢版 |
2017/04/22(土) 22:48:51.75ID:AOzJBbd9
>>310
プロシージャを跨いで値を保持させるなら、グローバルな配列変数、(アプリケーションがExcelならば)セル、シェイプ、カスタムドキュメントプロパティ、グローバルコレクション、自作のグローバルクラスのインスタンスなどに値を記憶させるしかない

でもそれならわざわざプロシージャ内でDictionaryを使って連想配列を操作するより、ExcelのセルにKeyと値を書き込んで配列アクセスして読み書きする処理の方が遥かに楽だと思う
0312デフォルトの名無しさん
垢版 |
2017/04/22(土) 23:30:15.48ID:zUhE/Mll
>>311
ありがとうございます。
今作っているコードでセルへのアクセスが膨大になってきて処理時間がどんどん長くなる傾向がみられまして
全操作をセルにアクセスせずに完結させようと色々考えていましたがなかなかそうはいかないようですね。
0314デフォルトの名無しさん
垢版 |
2017/04/23(日) 10:16:09.39ID:wfwXXeKO
>>312
標準モジュールとかでDictionary型のオブジェクト変数をグローバルスコープ(Public)でNew宣言すれば、処理を抜けてもDictionaryのItemは初期化されないんじゃないのかな
ただ単なる配列の処理でデータが数千件程度なら、描画止めた状態でワークシート使った方が遥かに楽だと思うが。
0317デフォルトの名無しさん
垢版 |
2017/04/23(日) 18:02:04.26ID:fs201BJ1
>>316
プロシージャを跨ぐって話だろ。
別のプロシ−ジャに引数として渡せば形の上ではそれぞれのローカル変数でも値は保持されるだろ。
0318デフォルトの名無しさん
垢版 |
2017/04/23(日) 18:27:09.16ID:yvJyPXpi
>>317
>>310を読んでなんとなく、一個のルーチンのプロシージャ間の値の受け渡しの話ではなく、ルーチン内で一度AddしたDictionaryのKeyとItemを何らかの形で保存して、同じルーチンを再実行したときにKeyとItemを再利用することが出来るかどうかという話だと思ったんだが

まぁ、オブジェクトプロパティへの値の保存も実際はそのオブジェクトを定義してるクラスのメソッドに引数を渡してるのと同じだから、変わらないといえば変わらないけど
0320デフォルトの名無しさん
垢版 |
2017/04/28(金) 19:14:11.69ID:AZuqyiJa
>>319
俺は使う時にクリアされてるかチェックしてクリアされてたら再設定するようにしてるな。
値が0だったら値を取得するFunctionを呼び出すって感じ。
0321デフォルトの名無しさん
垢版 |
2017/04/28(金) 22:13:43.74ID:A3VkBONm
Publicな静的変数は使わない。
エクセルのセルとかワードの文書変数とかの規定オブジェクトにデータを書き込んだ方が便利
0322デフォルトの名無しさん
垢版 |
2017/04/29(土) 02:16:02.91ID:2iGvQ1xG
>>321
いや、それは格好悪いんじゃね?
セルを使ったりCustomDocumentPropertiesも使うけど、それに合ったものだから使うわけでPublic変数に合ったものもある。
適材適所だろ。
0323デフォルトの名無しさん
垢版 |
2017/05/25(木) 20:51:55.45ID:yS9f0RVc
ontime で実行するプロシージャって標準モジュールに書かないとあかんのか。
このブックでマクロが使用できないか、またはすべてのマクロが無効になっている可能性があります。って出た。
0325デフォルトの名無しさん
垢版 |
2017/05/26(金) 00:03:34.69ID:Fw61rXsb
>>324
ThisWorkBookのモジュールからOnTimeでThisWorkBookのモジュール内のPrivate Sub を予約したんですが・・・これじゃ駄目なんですかね?
0326デフォルトの名無しさん
垢版 |
2017/05/26(金) 23:19:52.51ID:Fw61rXsb
>>325です
OnTimeで実行予約するプロシージャを標準モジュールに移動したら動くようになりました〜
0327デフォルトの名無しさん
垢版 |
2017/06/05(月) 21:02:56.92ID:bd1ggU41
特定の文字が含まれているセル(複数ある)を検索し、

検索されたセルを含む行全体(Entirerow)を同時選択する方法

以上お願いします。
0328デフォルトの名無しさん
垢版 |
2017/06/05(月) 21:06:49.56ID:bd1ggU41
その文字を含むセルを、行ごと削除したり、行ごとコピーしたりと、いろいろしたいので質問致しました。
0330デフォルトの名無しさん
垢版 |
2017/06/05(月) 21:31:47.51ID:tRFV5HQ5
>>328
とりあえず、複数行を選択するところをマクロの記録で見てみたら?
ctrlキー押しながら選択するのとshiftキーを押しながらのとで。
0331デフォルトの名無しさん
垢版 |
2017/06/05(月) 21:41:12.12ID:jKyX/qwq
検索対象のセル範囲でForループを回す
セル値に特定文字を含むセルが見つかる度にEntireRowを取得して変数に入れるかUnionで選択対象の範囲をマージしていく
ループ終了後にSelectする
以上
0332デフォルトの名無しさん
垢版 |
2017/06/05(月) 21:45:35.27ID:epzJZZwH
>>327
Ctrl+Fで検索しろやボケナス
ちゃんと行選択までしてくれるぜ
0333デフォルトの名無しさん
垢版 |
2017/06/05(月) 22:37:03.17ID:bd1ggU41
ごめんなさい、質問者です。
ここじゃなかったのですね。上に上がったやり方でできそうなのでやってみます。ありがとうございます
0334デフォルトの名無しさん
垢版 |
2017/06/06(火) 05:49:03.11ID:tznXutzN
色々細かい条件でどんなコードが効率いいか、変わってくるでしょ。

例えばそのセルがあるのは、特定の行だけとか、検索文字列はセルに完全一致なのか含まれるのか、など。
0335デフォルトの名無しさん
垢版 |
2017/06/06(火) 09:11:47.41ID:YhE+Nuz8
331だが、同じ行に該当セルが複数ある場合は無駄が生じるな
実現したい機能次第だが、工夫が必要かもな
0336デフォルトの名無しさん
垢版 |
2017/06/07(水) 19:31:10.77ID:e13xfCG0
はじめまして。以下2点、教えていただけると幸いです。
環境は、OS:Windows7, Excel2010です。よろしくお願いします。

1.プルダウンの初期値設定
セルA1にりんご、A2にバナナ、・・・のようにA列にある項目をプルダウンで選択したいです。
このとき、「A列のj行目(パラメータ選択可能)を初期値にしたプルダウンをB1に設置する」VBAのコマンドを教えていただきたいです。

2.ファイル名の変更
aaa.txtというファイルをデスクトップに出力するマクロを作れました。
このマクロ実行後、再度実行するとaaa(2).txtのファイルを、再度実行するとaaa(3).txtのファイルを出力・・・
このようなVBAのコマンドを教えていただきたいです。
0339デフォルトの名無しさん
垢版 |
2017/06/08(木) 05:33:24.44ID:1DKX/Vru
>>336
1
・B1セルを選択してからマクロの記録を実行
・入力規則でリストを選択にリストの内容でA列を選択する
・マクロ記録の終了をする
・できたコードを修正してA列の任意のセルをデフォルトにするように変更する

2
・デスクトップにaaa.txtが存在するかチェックする。
・存在しない場合はaaa.txtを作成して終了。
・存在する場合はDo~Loop中にデスクトップにaaa(i).txtが存在するかチェックする
・存在する場合はiをカウントアップして次のループ
・存在しない場合はそのiを使用してaaa(i).txtを作成して終了。
0340デフォルトの名無しさん
垢版 |
2017/06/25(日) 17:10:56.20ID:/fEFwdln
A1セルに =NOW()-TODAY() と入力すると
現在時刻が表示されますが。

MsgBox Range("a1")
とすると 0.0110212・・・と言ったような数値が出ます。

Dim now As Date 
now=Range("a1")
と型を指定した変数に格納してやると 
MsgBox now で 21:49:32 といった一般的な時間表記を示せますが、

変数化を省略して
MsgBox Range("a1")〜に補足コードを書くなどで同じ処理を実現する方法は無いのでしょうか?
0342デフォルトの名無しさん
垢版 |
2017/06/25(日) 17:26:03.97ID:/fEFwdln
>>341
なんと!!
変数をだらだら定義すること無く綺麗さっぱり解決できました!ありがとうございました。m(_ _ )m
0343デフォルトの名無しさん
垢版 |
2017/07/17(月) 17:20:20.62ID:7pjXcMGR
プロシージャの中で1回しか使わないのに、わざわざ変数にするやつとかいるよね。(しかもハンガリアン記法で)

100行に満たない程度のコードなら、Withステートメント使ったほうがむしろ可読性は上がる。
0344デフォルトの名無しさん
垢版 |
2017/07/17(月) 17:25:26.05ID:l3sSLpQS
マシンパワーが貧弱だった大昔ならともかく、今時はリソースを気にする必要なんてないんだから、可読性を最優先で記述するべきだよ。
0345デフォルトの名無しさん
垢版 |
2017/07/23(日) 22:54:52.46ID:EbUz/UVB
>>343
ああ、俺だ。
Ubound(配列)とか、For〜Nextの中で何回も実行すると、
なんか遅いような気がして、一度変数に入れちまう。
0347デフォルトの名無しさん
垢版 |
2017/09/01(金) 23:04:37.73ID:RmCwgyLh
>>345
(1)
For I1 = 1 to UBound(xxx)
For I2 = 1 to UBound(xxx)
(2)
J=UBound(xxx)
For I1 = 1 to J
For I2 = 1 to J

普通に考えて本のチョット早いと思われますが、記述の労力ほどじゃない。
他の方の書いてますが、今は、処理速度が物凄く早くなっています。
気にしなくていいと思います。
ただし、私はEXCELでVBAを書くのですが、シートのセルに書き出すと物凄く遅くなる。
VBAの配列とかメモリーならばほとんど気にしなくていいです。
ですから、メモリー内で処理して最後の最後にシートに書くようにしてます。
0348デフォルトの名無しさん
垢版 |
2017/09/02(土) 08:26:52.52ID:tqo/3wkP
>>347
> ですから、メモリー内で処理して最後の最後にシートに書くようにしてます。
基本中の基本だからいちいち書かなくてよろし
0349デフォルトの名無しさん
垢版 |
2017/09/05(火) 10:53:29.80ID:WmSrV0rS
アノニマスに入会したいんですがVBA知ってるだけで入れますか?
あと入会ってどうやんの? スーツ着て履歴書持って事務所に面接に行くの?
0350デフォルトの名無しさん
垢版 |
2017/09/05(火) 12:25:17.40ID:P2jRu54V
たまにハローワークに求人出てるから行ってみれば?
0351デフォルトの名無しさん
垢版 |
2017/09/12(火) 02:10:43.27ID:2wFcaigK
超初心者です
同じブック内の複数のシートにある顧客データをUserFormを用いて(検索するイメージ)抽出し、別のシートへ出力するコードを書きたいのですがいまいちわかりません。
大変困っているのでヒントをくださればありがたいです。
0352デフォルトの名無しさん
垢版 |
2017/09/12(火) 02:30:21.88ID:U3/YorLf
>>351
超初心者には無理です
パソコン教室に通ってせめて初級をクリアしてから質問してください
0353デフォルトの名無しさん
垢版 |
2017/09/12(火) 04:10:40.96ID:2wFcaigK
>>352
返信ありがとうございます
Excel自体触ったことない超初心者ですが頑張っているところです( ??? )
0355デフォルトの名無しさん
垢版 |
2017/09/12(火) 12:27:40.35ID:7XJfZGpJ
どこで覚えようとお前の知った事じゃねえだろw
なんだこのバカはwww
0356デフォルトの名無しさん
垢版 |
2017/09/12(火) 13:06:30.39ID:N1ygkJfx
>Excel自体触ったことない超初心者

ユーザーフォームを作ったことはあるのか?
 無けりゃ、この時点でやろうとしていることはもう無理

VBAはほんの少しでも書いたことはあるのか?
まぁ最初は>>354の言うようにシート上で実現して、それをユーザーフォームにもっていくのが順当
というか触ったこと無いって時点で釣り確定
0357デフォルトの名無しさん
垢版 |
2017/09/12(火) 16:38:53.70ID:2wFcaigK
VBA参入門書とネットの知識を詰め込みました。
Excel初心者は本当です。友達に教えてもらいつつやっています。気分を害された方、すみません。
>>356さん非常に分かりやすいです。
二日間くらい最初からコードを書こうとしてもがいていましたが、マクロの記録が使えそうな気がします。
そのコードをいじってボタンで起動するユーザーフォームとくっつけるイメージで挑戦してみます。
0361デフォルトの名無しさん
垢版 |
2017/09/13(水) 00:17:05.57ID:DHqL5rdG
>>357
ユーザーフォームでその機能を実現する必然性が感じられない
フィルタオプション機能を用いて、検索結果の出力先を新規シートに設定するだけで事足りると思うぞ
0363デフォルトの名無しさん
垢版 |
2017/09/15(金) 10:19:31.10ID:wFtq+9vG
ADOの事でちょっと質問です
変数を定義する時に

Dim wkR as New ADODB.Recordset

ってするんだけど、RecordsetとRecordの違いって何?
0365デフォルトの名無しさん
垢版 |
2017/09/18(月) 06:42:59.71ID:xbe9SlrW
>>361-362 ありがとうございます、簡単なプログラムですが完成して感動しました。
Ifとマクロの記録が万能すぎることを肝に銘じてこれからもがんばります( ??? )
0366デフォルトの名無しさん
垢版 |
2017/09/18(月) 15:10:56.93ID:7Xxpypu9
>>365
万能過ぎないけどね。
そればっかり使ってる人は永遠に初心者なままだし、色々な面で出来の悪いプログラムになる。
自動生成されたコードのそれぞれの意味を理解して自分なりに書けるようになると上達する。

例えば
Range("B4").Select
Selection.Value=10
のようなコードが生成されると思うけど意味を考えたら
Range("B4").Value=10
で良いとわかるよね。
0368デフォルトの名無しさん
垢版 |
2017/09/18(月) 23:50:59.42ID:XctjYupl
すみませんお力添えをお願いします!
エクセルマクロ(VBA)の件でお尋ねいたしたく思います!
まずグラフの系列名はセル参照で表示させてます
シート名:あいうえお
適用グラフ:グラフ4
系列範囲:A11:Z11
必要なデータ選択は全ての系列で済ませています
あとはグラフで不要な系列を削除したいため、グラフに乗せたくない系列名は”×”になるようにしてます
この系列名”×”をVBAで自動的に削除させることは可能でしょうか?
またグラフは別シートの数値入力をもって自動作成される仕様にしているので、トリガーは設けません
デフォルトだと全部”×”のため(初めは数値データの入力がないため)
数値が入ると正しい系列名に変更されるため、VBAではまず”×”で削除して、”×”以外の系列名に変わったら復活するという構想を練っています
とりあえず、まず”×”を消すコードを見よう見まねで書いてみたのですが動作しませんでした
消すのは良いですが復活させるのも組み込むとなるとちんぷんかんぷんです
是非ともご教示お願いします!
Sub test()
Dim d As Long
Dim i As Long
Dim j As Long
For i = 2 To Sheets.Count
d = Range("A11:Z11").End(xlUp).Row
With Worksheets(i).ChartObjects("グラフ 4").Shapes.AddChart.Chart
.ChartType = xlLineMarkers
For j = .SeriesCollection.Count To 1 Step -1
If .SeriesCollection(j).Name <> "×" Then
.SeriesCollection(j).Delete
End If
Next j
End With
Next
End Sub
0369デフォルトの名無しさん
垢版 |
2017/09/19(火) 20:55:54.78ID:2SFxAhMD
>>367
説明サイトへのリンク、ありがとう。
取り敢えず、「階層構造のデータ間を移動する手段として」のRecordオブジェクトは使うこと無さそうw
0370デフォルトの名無しさん
垢版 |
2017/09/20(水) 01:17:31.22ID:2dxgF4qE
IF文初心者ですが
3つ数字の中から一番小さい数を判定したいのですが、
elseや入れ子で複数書けば判定できるというのは推測がつきますが
最も簡潔に記述するとしたらどんな記述方法がありますでしょうか?

例)
33 12 3

3を抽出
0372デフォルトの名無しさん
垢版 |
2017/09/20(水) 05:37:31.94ID:mkPuPLWs
>>370
x = 33
y = 12
z = 3
If x < y And x < z Then
  最小値 = x
ElseIf y < x And y < z Then
  最小値 = y
Else
  最小値 = z
End If
0377デフォルトの名無しさん
垢版 |
2017/09/22(金) 09:34:43.90ID:KphHXryq
汎用性を考慮しないのか。
なかなかひどい。こういう人もいるという参考になったわ。
0380デフォルトの名無しさん
垢版 |
2017/09/22(金) 10:13:30.00ID:yLI54yGL
配列に入れてループで最小値と比較して小さければ最小値を更新していくのが定石なのでは。
0381デフォルトの名無しさん
垢版 |
2017/09/22(金) 10:29:30.23ID:WIc1mdfR
だからMin関数で一発なのに、無駄に車輪の再発明をしたがるやつが多くてリンダ困っちゃう
0384デフォルトの名無しさん
垢版 |
2017/09/22(金) 14:57:48.38ID:WETwNkme
IF初心者とか言ってる人に何言ってるんだか

あといつからこのスレはEXCEL VBA限定になったんだ
0385デフォルトの名無しさん
垢版 |
2017/09/22(金) 20:39:03.91ID:zUC9dslV
>elseや入れ子で複数書けば判定できる
>最も簡潔に記述するとしたらどんな

という問いに、elseや入れ子の回答するのは無能以前に答えになってないのとちがう?
0386デフォルトの名無しさん
垢版 |
2017/09/22(金) 22:15:07.62ID:250/7oh7
え?え?日本語理解できてる?
質問には「Elseを使わずに」なんてどこにも書いてないぞ

ざっくり意訳すれば「IfとElseの数を最小に」する方法を聞いてるんだろ
0387デフォルトの名無しさん
垢版 |
2017/09/23(土) 06:12:18.34ID:6cN/4Ux4
372のは374が書いてるように、例えば
x=1
y=1
z=3
と入れただけで誤判定する。アルゴリズムの最低限を割ってるぞ。
372がベストアンサー(笑)だと質問者が思ったなら気の毒なので念のため。
0388デフォルトの名無しさん
垢版 |
2017/09/23(土) 07:50:16.98ID:nAanI8EG
そもそも計算量も最少じゃないしな
普通に

最小値 = x
If y < 最小値 Then 最小値 = y
If z < 最小値 Then 最小値 = z

ってやる方がわかりやすい
0389デフォルトの名無しさん
垢版 |
2017/09/23(土) 10:07:44.78ID:hX9NlXap
うん、ベストアンサーはMin使った方だね。
俺だったら迷わずMin使用する。
同時にMin使わない方法も考える。
配列ループも考えた。

でも、別にIf文使っても良いんじゃない?
そんな目くじらを立てるようなことじゃない。
0390デフォルトの名無しさん
垢版 |
2017/09/23(土) 12:22:56.52ID:/uotOgAp
>>386が分かってないバカ多すぎw
0391デフォルトの名無しさん
垢版 |
2017/09/23(土) 14:36:58.57ID:OMtgmcpv
だから372はif elseだとしても最小(計算量的に)の答えにもなってないし、そもそも答えとして間違ってるって話だろ
0392デフォルトの名無しさん
垢版 |
2017/09/23(土) 17:06:13.24ID:HTwX+3ra
それは勉強する奴と仕事にしてる奴のスタンスの違いだな。
仕事にしてる奴はIfを使わなきゃならないなんてことに遭遇しないから、はなっから抜けてる。
0393デフォルトの名無しさん
垢版 |
2017/09/23(土) 23:00:39.63ID:9AVefP05
必ずIfを使う縛りなら>>388がベストアンサー
ソートアルゴリズムの最初の1回目のループを展開してるだけなんだけど、基本中の基本のやり方
0394デフォルトの名無しさん
垢版 |
2017/09/23(土) 23:28:57.04ID:UvR7p8sn
>>392
if文の使い方を聞かれてmin()関数を教えるような人はプログラムを仕事にしないで欲しいのです
いえ、仕事をしないで欲しいのです
0396デフォルトの名無しさん
垢版 |
2017/09/24(日) 02:12:05.73ID:3B64fACL
勉強のため何が何でもIfだけで解決しなきゃいけなかったのか、
まだ初心者だからMinという便利な物があることを知らなかったのか
それによって変わってきちゃうからー
0397デフォルトの名無しさん
垢版 |
2017/09/24(日) 08:43:50.06ID:LX+6AD0q
>>395
仕様書ならそれが正解
しかし案件定義なら顧客が何をしたいかを読み取ってより良い方法を提案することも必要
そもそも>>370にはIf使えとは書いてないし
0398デフォルトの名無しさん
垢版 |
2017/09/24(日) 09:20:40.69ID:SDtHFGLj
>>394
分かってねえなあ。
勉強を教える仕事じゃないならユーザーにとって一番使いやすいとか、速度が速いとか、ユーザーが満足するようなものかどうかが大事なのであって、どんなコードじゃなければならないとかの要望は普通無い。
そして、メンテナンス性とかコードの書き方に関してもMinの方が良いとなればそもそもの問い掛け自体仕事で発生することは無い。

そして実際には、何でMinじゃ駄目なのと問い掛けられない奴は仕事の出来ない奴ということになる。
(もちろん明確に理由が有るならIfで書く。)
指示通りにしか作れない奴じゃ単なるコーダって奴になるしかない。

仕事ではMinを使わないなら明確な理由が存在するし、打ち合わせなんかのやり取りで既に意思統一されてる筈だ。
つまり今回の問い掛けのような事態は存在しない。
0399デフォルトの名無しさん
垢版 |
2017/09/24(日) 10:07:44.74ID:lViLIhLn
>>393
だな、簡素で分かりやすく奇麗なコードだ
0400デフォルトの名無しさん
垢版 |
2017/09/24(日) 15:00:43.73ID:3BjqQEbI
>>398
なんか仕事をしてる体で話してますけど
あなたの想像上の仕事では自分にとって都合の悪い事態は存在しないのですね
さぞかし楽しかろうとは思いますが
あなたは社会に出ないでください
0403デフォルトの名無しさん
垢版 |
2017/11/08(水) 09:41:10.42ID:VRSOCYqC
再利用したいけどExcelの話をしたいときに困るのかな
0406デフォルトの名無しさん
垢版 |
2017/11/08(水) 11:59:42.12ID:VRSOCYqC
なるほどなるほど
0407デフォルトの名無しさん
垢版 |
2017/11/08(水) 12:50:47.32ID:+KUB1/9h
早速質問
今vbaでマップ使って
とある表の集計を行なっております
一つのkeyに対しアイテムが複数あるので
配列で入れようと思ったのですがうまくいきません
何か良い方法はありませんか?
0409デフォルトの名無しさん
垢版 |
2017/11/08(水) 21:23:36.05ID:+KUB1/9h
>>408
一つのキーに対して複数のアイテムがある
これをどうにかこうにか出来ないか

やりたいことは
キーが重複された二次元配列を
グループ化&合計を取りたい
0410デフォルトの名無しさん
垢版 |
2017/11/08(水) 21:28:10.43ID:aQlO1Uq5
>>409
エクセルならピボットテーブルでいいんじゃない?
0411デフォルトの名無しさん
垢版 |
2017/11/08(水) 21:32:09.19ID:+KUB1/9h
>>410
自動で計算させるんだよ
0412デフォルトの名無しさん
垢版 |
2017/11/08(水) 21:33:56.61ID:aQlO1Uq5
>>411
ピボットテーブルをvbaで作ればいい
0413デフォルトの名無しさん
垢版 |
2017/11/08(水) 21:38:43.05ID:vt31E4Mm
エスパーじゃないんだから、もっと具体的に説明しないと、何がしたくて何ができないのか判んないよ。
そして多分だけど普通にifで分岐するプログラムを書くだけだと思う。
0414デフォルトの名無しさん
垢版 |
2017/11/08(水) 21:40:37.09ID:0sSRKP/b
いや多分forでループするプログラムを書くだけだと思う
0415デフォルトの名無しさん
垢版 |
2017/11/08(水) 22:38:17.07ID:+KUB1/9h
データシート
キー 金額a 金額b
1 10 20
2 20 50
1 30 90

結果(期待)
キー 金額a 金額b
1 40 110
2 20 50



上のような感じのシートがあって
集計かけたり
平均とったり
最大値だったりしたい
0416デフォルトの名無しさん
垢版 |
2017/11/08(水) 23:08:47.37ID:aQlO1Uq5
>>415
そのくらいの事を自分でできないなら
ピボット使った方がいいと思うぞ
バグって計算結果が合わないから
0417デフォルトの名無しさん
垢版 |
2017/11/08(水) 23:25:51.57ID:0sSRKP/b
そのくらいの事を自分でできないから質問してんだろ
そのくらいの事を理解できないなら質問スレに来ない方がいいのに
0418デフォルトの名無しさん
垢版 |
2017/11/08(水) 23:38:17.91ID:aQlO1Uq5
そのくらいの事も判らない人にも実現できる方法を提案してるだろ
0419デフォルトの名無しさん
垢版 |
2017/11/09(木) 00:17:55.65ID:hDRDp7cw
https://i.imgur.com/wtkTdlA.png
上のように各列の情報に応じて、一定の条件にヒットしたら評価欄に追記、ということをしているのですが、
上手い書き方が思いつかず、冗長で読みにくいコードになってしまいます
https://i.imgur.com/cE0kOho.png

どうすれば綺麗で読みやすいコードになるでしょうか?

特に、変数(ここでは「評価」)の参照先のセルに書き込みつつ、変数の値自体も更新するスマートな方法と
If文で2つの条件が当てはまった場合に両方の処理を実行させる(ここでは40点以下と60点未満のIf文を一つで済ませるとか)方法があれば知りたいです
0420デフォルトの名無しさん
垢版 |
2017/11/09(木) 03:11:02.61ID:HAMnFTNh
>>419
配列を使え
あとソースを読んだり修正したりやりにくいから画像にせずそのままテキストとして貼ってくれ

科目 = Array("国語", "算数", "理科")
For j = 0 to 2
  点数 = i.Offset(0, j + 1)

  If 点数 <= 40 Then
    i.offset(0, -1).Value = i.offset(0, -1).Value & 科目(j) & "の点数が以下略" & vbCrLf

みたいな感じで教科の数に関わりなく記述を1回にできる
条件が3つ以上ある時はCaseで分ける方法もあるけど、どんどん文字列を追加するならIfを並べる今の書き方で別に悪くない
0421デフォルトの名無しさん
垢版 |
2017/11/09(木) 08:39:48.02ID:m3IDSHjM
ありがとうございます、やってみます
(コードは行数制限とインデントが反映されなかったのでつい画像に…すみません)
0422デフォルトの名無しさん
垢版 |
2017/11/10(金) 08:15:39.86ID:vvDXnBRS
オートフィルの連続データでA1が0なら終わりでそれ以外なら下にオートフィルの連続データを追加して行くってどうやればいい?
0424デフォルトの名無しさん
垢版 |
2017/11/10(金) 09:18:59.30ID:vvDXnBRS
下に一つオートフィルの連続データを追加してもしもその数が0以外ならばその下に一つづつ追加してもし0になったら終わるってことです

オートフィルの連続データまでは成功しました!
0425デフォルトの名無しさん
垢版 |
2017/11/10(金) 12:58:08.94ID:MIqJX5DT
>>424
何をやりたいのかさっぱりわからんから
> オートフィルの連続データまでは成功しました!
のコードを晒してくれ
0426デフォルトの名無しさん
垢版 |
2017/11/10(金) 22:07:12.41ID:KbRkXeO5
何をどーしたいのかよーわからんが、
オートフィルの連続データが完成したならDo  While Loopでも使えばいいんじゃね
0427デフォルトの名無しさん
垢版 |
2017/11/11(土) 10:59:01.85ID:t1iacSS7
そうですね連続データと探す作業分けてDo until使ってみたら目的は達成できました ありがとございます
0428デフォルトの名無しさん
垢版 |
2017/11/16(木) 11:42:09.40ID:DcGHOE5h
漠然とした質問で申し訳ない
コレクションというのがあるけど、その利点というかこういう場合に使うとかという
のを教えてくれないだろうか。配列は動的配列も含めてよく使うけどコレクション
というのはあるのは知ってるけどどういう場合に使うものなのか判らない。
(まぁそれでも何とかなってるということは今の時点ではそれでも問題ないって
ことでもあるんだけど)
0429デフォルトの名無しさん
垢版 |
2017/11/16(木) 12:38:12.83ID:Xd3mhum+
>>428
Dictinonaryだとキーが重複してたらエラーになるから
重複させたくない場合は便利だと思う

あと既にそのキーが登録してあるか調べるメソッドがあるから便利

配列でも実現出来るけど生産性の問題だと思う
0430デフォルトの名無しさん
垢版 |
2017/11/16(木) 12:40:16.53ID:+IKZz2Nz
>>428
Excelならコレクションは知らないうちに必ず使ってるから心配しなくてもいい

オブジェクトを複数まとめた物がコレクションで、例えばワークシートオブジェクトをまとめた物もコレクションの一種
新規ブックを作るとワークシートが3枚あるじゃろ?それがもう既にコレクションなんだわ

名前をよく見ると「Worksheets」って複数形になっとるじゃろ?これが「複数まとめた」コレクションを示しておるのじゃ
0432デフォルトの名無しさん
垢版 |
2017/11/16(木) 17:01:22.70ID:yjV64GpF
For Each
配列でも使えるけどね
0433デフォルトの名無しさん
垢版 |
2017/11/16(木) 19:57:40.06ID:NwFToy+4
広い意味では配列もコレクション
元質問のコレクションが何指してるか質問からは分からん
0434デフォルトの名無しさん
垢版 |
2017/11/16(木) 22:05:24.15ID:CQAbf3aD
>>433
どの言語でもコレクションの定義は曖昧だからなあ。

配列のように物理的に連続したメモリ領域で動かせないものが配列。
0435428
垢版 |
2017/11/17(金) 16:52:50.63ID:wkN6jGAZ
気付かないうちにコレクションを使ってたってのは、あぁそうなのかって感じですけど

>元質問のコレクションが何指してるか

思い浮かべてんのは連想配列とかディクショナリとかってやつですかね。
ディクショナリが重複チェックにも使えるってのは知りましたが。
今現在動かしているのをディクショナリに変えて見ようかなとと思ってます。
どちらにしろ自分で判らないことにはすすまんので。

後、曖昧模糊とした質問に答えてくれた皆さん、ありがとう
0436デフォルトの名無しさん
垢版 |
2017/11/17(金) 18:29:39.77ID:71HLXjvB
連想配列は配列と言いながら実体はコレクション
0438デフォルトの名無しさん
垢版 |
2017/11/19(日) 20:25:41.56ID:TCtIBT5G
感覚的な話になるけど、例えばA列、B列、C列には○と×が入っててD列には何かの名前が入ってる時に、A、B、Cの組み合わせが×、○、○の時のD列の名前を表示したいとするわな。
こういう場合は一行ずつ見て行って×、○、○の組を探すわな。
こういう場合はFor Next使うわな。
つまり普通の配列が感覚に合う。

一方、A1:F100の範囲の各セルで1つだけ○、他は全て×の時に○のアドレスを知りたいなんて時には見つかるまで全てチェックすれば良いわけで、どう見ていくかなんて関係無いわな。
こういう場合はFor Each Next使うわな。
つまり連想配列が感覚に合う。
0440デフォルトの名無しさん
垢版 |
2017/11/20(月) 09:52:50.14ID:6BLE5ZLY
>>439
ばーか。
感覚を例として挙げてることが分からないバカは黙ってろ。
もっと上手い方法があるだろうことは最初から分かってる。

順番を意識しないIteratorの感覚を説明してる。
コレクションにだって順番は実際はある。
しかしそれを意識しないような場合にぴったりということだ。
0442デフォルトの名無しさん
垢版 |
2017/11/20(月) 19:55:38.19ID:9xFKx2hL
他人の回答の批判とかするほうがおかしいね
質問に対して自分の考えで回答すればいいのに
0443デフォルトの名無しさん
垢版 |
2017/11/20(月) 20:06:38.53ID:Pkea+7u9
適当に批判してやらなきゃお前ら好き勝手に質問と関係ない事ばかり言うじゃん
批判してくれる奴に感謝しろよw
0445デフォルトの名無しさん
垢版 |
2017/11/20(月) 22:24:58.18ID:Pkea+7u9
>>444
自分は質問と関係ない自分語りするけどそれを批判されるのは許せないってか?
どんだけワガママに育てられたんだお前は
0447デフォルトの名無しさん
垢版 |
2017/11/29(水) 12:35:10.96ID:rUGEU7g7
ドカタ仕事の憂さ晴らしをここでやるのはやめてほしいと思うのです
汚い言葉を使うのは本人は無頼漢的にイケてるつもりかもしれないけど
側から見ると貧乏くさいのです
0449デフォルトの名無しさん
垢版 |
2017/11/30(木) 12:22:49.90ID:xlQjmi4Q
accessの条件付き書式について質問です。
FormatConditions.Add(acExpression,,
の後の式は変数を展開してくれないでしょうか?
また、関数の呼び出しも出来ないでしょうか?
例えばmonth関数は呼び出して戻り値が得られるのですが、自作関数だと呼び出せなくて困っています。
0450449
垢版 |
2017/11/30(木) 21:43:31.97ID:xlQjmi4Q
解決しました。関数使えますね。変数はまだ試していませんが、たぶんダメでしょうね。
0451デフォルトの名無しさん
垢版 |
2017/12/01(金) 18:18:22.33ID:pnEu13zx
Includeのようなことはできないでしょうか?
参照設定ではありません。

現在、ユーティリティ関数を集めたxlamファイルがあるのですが、中身が膨れ上がってきました。
機能単位でファイルを分割したいのですが、
そうすると今まで参照設定でutility.xlam1つで済んでいたのが、
utility_picture.xlam
utility_text.xlam
utility_workSheet.xlam ...
と、いくつも参照しなくてはならなくなります。

utility_xxx.xlamをすべてインクルードした1つのファイルを作り、
それを参照すればすべて使える、というようにしたいのです。

こういうことはできるでしょうか。
0453デフォルトの名無しさん
垢版 |
2017/12/01(金) 19:38:52.29ID:xB5YUWoV
>>451
ひとつのxlamがいくつの標準モジュール、クラスモジュールを持ってるの?
VBAでそんなに大きくなるイメージがいまいち湧かないんだが
0454デフォルトの名無しさん
垢版 |
2017/12/01(金) 19:54:29.89ID:WVxyYcg9
なんでも詰めこめばいくらでも大きくなるだろw
どんだけ貧困なイメージ力だよw
0455デフォルトの名無しさん
垢版 |
2017/12/01(金) 22:49:56.60ID:kRHH2X4z
なんでも詰め込んで大きくなったならダイエットしろというアドバイスになるだろw
0457デフォルトの名無しさん
垢版 |
2017/12/02(土) 00:51:50.91ID:aL/u+cy3
>>451
そういう運用は良いのかという問題がある。
それぞれのアドインがバッティングしないのなら、そもそもアドイン1つに纏めるべきじゃね?
カテゴリが別だからとか色々理由が有るんだろうけど、その理由がそのままいくつも参照すべきという理由になるだろ。

アドインを1つに纏めるべきかいくつも参照すべきのどちらかじゃね?
0458デフォルトの名無しさん
垢版 |
2017/12/02(土) 10:54:25.96ID:7He58R5A
>>457
・プロジェクトエクスプローラが縦に長くなりすぎて使いづらい。
・巨大なクラスになるとfacadeパターンを使って分割しているのですが、
 その際に処理を委譲するクラス名にxxx_reader, xxx_outputter等つけています。
 ファイルを分けられれば単にreader, outputterで済むのですっきりさせたい。
この辺が分けたい理由です。
触るのが久しぶりだったので忘れていたのですが、a→b→cで参照が連鎖している場合、
a→cの参照がないとaからcの関数を呼び出せないだけで、プログラム自体は動くんですね。
いくつも参照でやってみようと思います。

>>453
単一目的のマクロ(そのutilityを呼び出す側)はそれほど大きくならないのですが、
画像操作、データシート処理のラッパー、デバッグ機能など
汎用的に使える機能をutility一つにまとめて行ったら大きくなってしまいました。
この辺を別ファイルにしようと思っています。
0459デフォルトの名無しさん
垢版 |
2017/12/02(土) 12:26:31.44ID:zSxtsSJv
どうせ使う時は全部必要なんだろw
無駄なことすんなw
0460デフォルトの名無しさん
垢版 |
2017/12/02(土) 13:17:30.17ID:7He58R5A
使うときは割と全部必要ですが、細かく分かれていないと
機能追加やリファクタリングが面倒なんですよ。
モジュールをディレクトリ分けしてツリー構造にするような
ことができれば一番いいんですが。
0461デフォルトの名無しさん
垢版 |
2017/12/03(日) 00:26:04.64ID:R5bnWQiD
出来るかどうか知らんが
親のユーティリティで子を自動的に参照設定すればいいんじゃね
たしか参照設定もVBAからいじれたはず
0463デフォルトの名無しさん
垢版 |
2017/12/09(土) 18:42:21.44ID:YxeiwW1g
Private Sub Application_ItemSend(ByVal Item As Object, Cancel As Boolean)
Dim objMe As Recipient
Set objMe = Item.Recipients.Add("domon@sapporotakusho.co.jp")
objMe.Type = olBCC
objMe.Resolve
Set objMe = Nothing
End Sub

検索すると出てくるこのプログラムだと、
再送しようとした場合、BCCが複数追加されてしまいます

Outlookで自動的にBCCを設置するプログラムは調べたら乗っているのですが
BCCに既に設定したいアドレスがあった場合は追加処理をしないというプログラムを追加したいです
0464デフォルトの名無しさん
垢版 |
2017/12/09(土) 22:22:36.98ID:kQB3PqQK
>>463
変数objMeを宣言している行の直前に以下の処理を追加

Item.BCCプロパティに設定されている文字列を取得して、その中にdomonなんたらっていうアドレスが含まれているかどうかをInStr関数で調べる
含まれていたらExit Sub
0465デフォルトの名無しさん
垢版 |
2017/12/10(日) 10:15:21.59ID:DS9ojUbh
ありがとうございます

間違えてメールアドレスそのまま載せてしまいました
やってしまった…

もう一度頑張ってみます
0469デフォルトの名無しさん
垢版 |
2017/12/19(火) 08:02:47.16ID:QIKPQsgo
一営利企業の一製品に過ぎませんから
0471デフォルトの名無しさん
垢版 |
2017/12/27(水) 11:51:23.41ID:3pB/qkZc
python入る言うてもどのバージョンかとかライブラリかとかアップデートはするのかとか色々課題あるだろ
0472デフォルトの名無しさん
垢版 |
2018/01/25(木) 12:20:39.14ID:HAPJI9RJ
質問なのですが、別表の項目から他の表の項目(セルの位置)にデータを飛ばしたいんですが、できますか?
0475デフォルトの名無しさん
垢版 |
2018/01/25(木) 13:19:32.33ID:Hqq1J0vI
×ご教授
○ご教示
あと、見も知らぬ他人にタダで教えてもらうんならそれ相応の作法は必要じゃないのって、端で見てて思う
0476デフォルトの名無しさん
垢版 |
2018/01/25(木) 13:38:48.56ID:ULmYwE81
>>472
もっと具体的にどんなのが作りたいか書いてもらわないと難しいです。

5列目を変更した時に同じシートの1列目を選択するようにしたい、とか。
あるいは、別のシートのA1セルを選択したいとか。

飛ばすといっても、そのタイミングが変更した時なのか、選択したときなのか、特定の数値が入ったときなのか。
0477デフォルトの名無しさん
垢版 |
2018/01/25(木) 14:35:16.74ID:HAPJI9RJ
こんな感じの表Aがあって、似たような表Bが別シートにあるんですけど、
表Aのセルの色を付けると同時にB表のセルのイロを変える

または、セルの文字も一緒に持ってくる

できますか?
https://i.imgur.com/u3mc1ot.jpg
0479デフォルトの名無しさん
垢版 |
2018/01/25(木) 16:44:16.87ID:WTDPcIn+
できるけど、コード教えてもらって、それを標準モジュールなり、sheet1モジュールなりに書き写せます?
それを使いやすいように改良できます?
0480デフォルトの名無しさん
垢版 |
2018/01/25(木) 17:08:48.29ID:WTDPcIn+
できるって書いたけど、色を変えるのをイベントにするのは無理だから、マクロをボタンに登録するか、何かほかのイベントに割り当てるかしないとダメだわ。
0483デフォルトの名無しさん
垢版 |
2018/01/25(木) 19:01:57.40ID:KaDWqQ6/
>>482
お忙しいのにみなさんありがとうございます
ちょっと詳しく説明すると、こんな感じです
左のsheetの表は一項目につき3段、その3段目の情報で仮にA,Bが記載されてある色つきのセルの情報のみを抜き出し、右にある別sheetの表に反映させたいのです

分かりづらかったらすいません

どのように組めば行けるのか、詳しく教えて頂くとありがたいです


https://i.imgur.com/M5bti06.jpg
0486デフォルトの名無しさん
垢版 |
2018/01/26(金) 09:48:49.15ID:zry4uQ/L
おわび
御貴兄たち、何卒添削お願いします。変数colとかrowのほうが良かったな
Const OFFSET_X = 1
Const OFFSET_Y = 1
Const BLOCKS_Y = 3
Const WIDTH = 6
Const HEIGHT = 6
Private Sub CommandButton1_Click()
  Dim src As Worksheet
  Dim dst As Worksheet
Dim x As Integer, y As Integer
Dim des_x As Integer, des_y As Integer
  Set src = ThisWorkbook.Sheets("sheet2")
  Set dst = ThisWorkbook.Sheets("sheet3")
  dst.Cells.Clear
  des_x = 1 + OFFSET_X
  des_y = 1 + OFFSET_Y
  For y = 1 + 3 To HEIGHT * BLOCKS_Y Step 3
    For x = 1 To WIDTH
      If src.Cells(y, x + OFFSET_X).Value <> "" Or _
        src.Cells(y, x + OFFSET_X).Formula <> "" Or _
        src.Cells(y, x + OFFSET_X).Interior.ColorIndex <> xlNone Then 'エラー判定は無し
        src.Range(src.Cells(y, x + OFFSET_X), src.Cells(y, x + OFFSET_X)).Copy _
           Destination:=dst.Cells(des_y, des_x)
      End If
      des_x = des_x + 1
    Next x
    des_x = 1 + OFFSET_X
    des_y = des_y + 1
Next y
End Sub
0488486
垢版 |
2018/01/26(金) 11:04:59.89ID:HJtMv0FJ
あー〜スマン
>表Aのセルの色を付けると同時にB表のセルのイロを変える
この仕様を見逃してたわ
見なかったことにしてくれ
0489デフォルトの名無しさん
垢版 |
2018/01/26(金) 19:09:34.97ID:o3fzSqcU
>>487
入ってます
欲しいデータは1色で統一されてますが
ちなみに他に文字が存在しており、それらはほかの色で存在しています

>>488
お手数お掛けしております
ほんとにありがとうございます

色で判断をなくして、(条件で変えるので)>>483に書いてある欲しいデータ4種類を転記させるものでも良いのですが、難しいでょうか
0491490
垢版 |
2018/01/26(金) 21:06:22.97ID:K81AssZX
パソコンで見たら見えた。
これ、変更したところだけ反映したいの?
それとも、元表の3行目全てを反映したいの?
というか、データだけなら=で結べばいいのでは?
0492デフォルトの名無しさん
垢版 |
2018/01/26(金) 21:17:19.09ID:o3fzSqcU
>>491
そこまでして見ていただいて申し訳ないです

三段目だけを反映させたいのですが、その手書きの表の列、行ともに結構長い表なのです
手っ取り早く一瞬で作れたらと思って質問した次第です
0493デフォルトの名無しさん
垢版 |
2018/01/26(金) 21:21:20.15ID:Vo+OzJVu
Excel VBAスレいけば寄ってたかってみんなで教えまくってくれんじゃね?行けば?
0495490
垢版 |
2018/01/28(日) 01:47:10.17ID:xXGJMKWE
>>492
結構長いというけど、どれくらい?
数十列数十行くらいで、1回だけなら右にオートフィルして、行ごとコピペするのが早いと思う。
=で繋ぐだけなら1回やっておけば、あとは自動でかわる。

マクロでやるとしても、数式で=を入れればいいのか、値を持ってくるようにした方がいいのか。
表の範囲指定はどうするか?
current.regionか、usedrangeか、直接指定するか。(元の表に罫線が引いてあるか、空欄があるかで変わってくる)
0496デフォルトの名無しさん
垢版 |
2018/01/28(日) 14:19:41.49ID:Erw8GBm0
数式だって絶対参照、相対参照をきちんと意識して書けばRange=数式でアドレスに併せて変えてくれるから1回の代入で終わる。

以外と知らずに1セルずつ代入する人もいるけど。
0497デフォルトの名無しさん
垢版 |
2018/01/28(日) 14:51:25.14ID:fbEFMaxh
>>495
3段目に毎回同じ文字がくるとは限らず、最低3種類の文字がくるので、とりあえずif分使って作成しました

横に日数1年分、縦に各項目50程です

絵にある通り、全く同じ表をコピペして使いますが(線あり)、ほんとは転記先の表は1段で済ませたい所でした
日替わりで最低3種類のうちのひとつが返ってきたらいいので

わかりづらくてすいません
0499490
垢版 |
2018/01/28(日) 17:27:50.85ID:z3VzjyNA
>>498
fast-uploader.com/file/7072682105190/

目的のものと全然違うかもしれないけど作ってみました。
データの最初のセルだけは自分で指定してください。
0500490
垢版 |
2018/01/28(日) 17:29:06.20ID:z3VzjyNA
パス 0128
0501デフォルトの名無しさん
垢版 |
2018/01/28(日) 18:08:34.70ID:745uG8BQ
>>499
乙です
老婆心ながらアップする前に「ブックの検査−ドキュメント検査」したほうがよろしいかと。
0502499
垢版 |
2018/01/28(日) 18:41:56.85ID:UOLejiJq
サンクスです。
渡辺明さんになるところだったか。
0504デフォルトの名無しさん
垢版 |
2018/01/28(日) 23:12:38.58ID:Erw8GBm0
>>498
やり方も何も、例えばA1からA列に1、2、3、・・・と入力されてるとしてRange("B1:B10").Value="=A1"を動かしてみな。
全部A1を参照したいならRange("B1:B10").Value="=$A$1"とする。
本当はValueではなくてFormulaだけどValueでもちゃんと相対参照してくれる。
0505499
垢版 |
2018/01/28(日) 23:23:45.53ID:9bi4pzKP
fast-uploader.com/file/7072704922415/

パス 0128
0506デフォルトの名無しさん
垢版 |
2018/01/29(月) 00:30:08.47ID:flk0qVid
>>504
>>505
みなさん、無知ですみません
ほんとに助かります
ありがとうございます

>>505
ひとまずダウンロード致しましたので明日内容を確認します
お時間割いて作っていただいて、ただただ感謝です
おやすみなさい
0507デフォルトの名無しさん
垢版 |
2018/01/29(月) 00:48:46.52ID:rWIIKeXW
下から5行くらいにtext ってあるの、valueに直した方がいいかも。
textでも問題ないかもしれないけど。
0508デフォルトの名無しさん
垢版 |
2018/01/29(月) 08:59:53.06ID:flk0qVid
おはようございます

昨日ダウンロードさせてもらったファイル開かないのですが、どうやったら開きますか?
0511デフォルトの名無しさん
垢版 |
2018/02/03(土) 14:43:09.33ID:xQQ90zOV
プログラマですがvbaの初心者です。
C,java,lisp,python 基本的な言語とその意味論はだいたい知ってます。
vbaで書籍を探すと、大抵業務問題の解決という文脈で本が書かれているようですが
純粋に言語的な機能を抽出した言語仕様、あるいはリファレンスに相当するものを求めています。

そのような書籍のうちもっとも簡潔に記述されているような本はないでしょうか?
0512デフォルトの名無しさん
垢版 |
2018/02/04(日) 02:06:08.04ID:Nq0C9+DR
>>511
本職のPGならマイクロソフトのディベロッパーセンターの英語版リファレンスを直に読んだ方が良い
あと、場合によってはVBAとほぼ同じシンタックスになってるVB.NET用のMicrosoft.Office.Interopクラス以下の各アプリケーションのオブジェクトのリファレンスの方が役に立つこともある
0514デフォルトの名無しさん
垢版 |
2018/02/04(日) 09:08:27.88ID:PHOmwLAR
VLOOKUP関数の応用で、2列のリストがあり、検索セルではどちらかを入力するともう片方が入力されるものをVBAで作りたいのですが、、、
0515デフォルトの名無しさん
垢版 |
2018/02/04(日) 09:30:57.37ID:VbMnR6W2
>>514
左をキーにしてvlookup 、次に左をキーにしてvlookup すれば良いんじゃないか?
右と左に同じ内容が存在するとダメだけど。
0517デフォルトの名無しさん
垢版 |
2018/02/12(月) 15:08:18.20ID:IVihLGwq
グラフを作成するときにXValuesってすべての系列で統一しないといけないんですか?
x1={0., 1., 2.}, y2={0., 1., 4.}
x2={0., 0.5, 1., 1.5, 2.},y2={0., 0.25, 1., 2.25, 4.}
みたいな2つの系列があったときにplot(x1,y1), plot(x2,y2)みたいに扱いたいのですがどうしたらいいでしょうか
0518デフォルトの名無しさん
垢版 |
2018/02/15(木) 06:58:28.28ID:oNAH0wTr
特定のフォルダ内のすべてのブックにC列に複数存在する特定の文字列『a』のすべてに対して右隣のセルに文字列『aa』を入力して、さらに同じシート内でC列に複数存在する特定の文字列『b』のすべてに対して右隣のセルに文字列『bb』を入力するようにしたいのですがどのような感じになりますでしょうか?
0519デフォルトの名無しさん
垢版 |
2018/02/16(金) 06:08:56.24ID:W1XJdyx1
☆ 日本の、改憲を行いましょう。現在、衆議員と参議院の
両院で、改憲議員が3分の2を超えております。
『憲法改正国民投票法』、でググってみてください。国会の発議は
すでに可能です。平和は勝ち取るものです。お願い致します。☆☆
0521デフォルトの名無しさん
垢版 |
2018/02/19(月) 16:09:20.27ID:CaXwZ0Gg
vbacでmdbファイルをcombineしていると、「このアクションを実行するとプロジェクトがリセットされます。実行しますか?」というダイアローグが出てくるのですが、回避策をご存じの方いますか?
0522デフォルトの名無しさん
垢版 |
2018/03/07(水) 08:26:06.09ID:tPOSTBDK
VBA初心者です。
省略可能なキーワードOptionalに関して質問がございます。
・質問内容
以下のコードにおいて、なぜ"ABC"が2回繰り返されるのでしょうか?
Optionalで指定した1が初期値としてtmpに格納され、For〜Nextステートメントの処理が0〜1となり、回答は”ABC”のみだと考えました。

・コード
Sub Sample1()

Call Sample2

End Sub

Sub Sample2(Optional tmp As Long = 1)

Dim i As Long
For i = 0 To tmp
Debug.Print "ABC"
Next i
End Sub

基礎的な質問で恐縮ですが、ご解説いただければ幸いです。
よろしくお願いします。
0523デフォルトの名無しさん
垢版 |
2018/03/07(水) 09:34:45.98ID:1c1zt9Ui
>>522
0も1回と数えるから、i が0の時に1回、1の時に1回、合計で2回です

For i = 1 To tmp
にすれば1回になるよ
0524デフォルトの名無しさん
垢版 |
2018/03/08(木) 09:50:20.87ID:kgkGNmtQ
>>523
解説頂きましてありがとうございます。
0も1と数えるのはややこしいですね。。
しっかり復習します。
0525デフォルトの名無しさん
垢版 |
2018/03/08(木) 17:16:49.20ID:1OkrDYdr
配列は0スタートとか知っておいたほうが良い(VBAの場合はOption Baseで切り替えられるけど)
0526デフォルトの名無しさん
垢版 |
2018/03/08(木) 18:23:37.87ID:bSaoLb8p
>>524
理屈で覚えればややこしくはないぞ。
配列の添字は距離のようなもので、「当該配列の1個目の要素のポインタを起点としたときに、そのポインタにどれだけ(何回)加算した場所に、その要素の格納されているメモリが存在するか」を示す数字。
1個目の要素から1個目の要素に移動するための加算回数=距離は0だから、1個目の要素にアクセスするときの添字は0になる。
0529デフォルトの名無しさん
垢版 |
2018/03/08(木) 21:40:28.86ID:Og1NJDFT
こればかりはプログラマーを混乱させるために導入されたとしか思えない謎仕様
0531デフォルトの名無しさん
垢版 |
2018/03/09(金) 19:02:04.18ID:M2r/B6Zk
>>530
お前はバカなんだからしゃべるな
0533デフォルトの名無しさん
垢版 |
2018/03/09(金) 19:47:08.42ID:M2r/B6Zk
>>532
あれ?発言を許可した覚えはないけど?
0534デフォルトの名無しさん
垢版 |
2018/03/10(土) 04:04:01.67ID:hJ8m/Sii
>>529
C#だとint[] intArray = new int[2]で要素は[0] と[1]になるんだが、
vbaだとdim Array(2) as Longが0,1,2の三つになるからたまにコンパイルエラーで悩む。Collectionは一から始まるが
Dictionaryは0からというのもたまに嵌る。
0535デフォルトの名無しさん
垢版 |
2018/03/10(土) 12:36:10.36ID:f+B2oLbA
>>534
> vbaだとdim Array(2) as Longが0,1,2の三つになるからたまにコンパイルエラーで悩む。
0,1,2になるか1,2になるかはOption Baseによる
コンパイルエラーは意味わからんが

>>533
お前が黙っとけよ w
0536デフォルトの名無しさん
垢版 |
2018/03/11(日) 13:41:16.21ID:1qbV0tMy
>>535
オマエも黙っとけハゲ
0539デフォルトの名無しさん
垢版 |
2018/03/11(日) 16:09:32.52ID:auu5o0Ru
>>535
cell番地が1から始まるからbaseも1じゃなきゃ書けないバカはレス禁止
0540デフォルトの名無しさん
垢版 |
2018/03/11(日) 16:12:01.55ID:ULAXnW5C
Cellsはコレクションオブジェクトを返すプロパティ関数だから、インデクサが1オリジンなのは文法上当たり前
0541デフォルトの名無しさん
垢版 |
2018/03/11(日) 16:16:16.76ID:auu5o0Ru
>>540
配列の話してんだよバカチョン黙ってろや
0543デフォルトの名無しさん
垢版 |
2018/03/11(日) 17:04:17.63ID:sEfAJdP7
Excelが開発された当初はまだ0の発見前だったからだろ。
今作るなら0から始まるようになる。
0544デフォルトの名無しさん
垢版 |
2018/03/11(日) 19:02:59.32ID:lvju0XX+
あーこれはスベったな
0545素人
垢版 |
2018/03/11(日) 22:39:56.16ID:/xAIuEgQ
こんばんは! おしえてください!
VBAでフリーフォームを書いたり、既にあるフリーフォームの頂点編集をしようとしています。
書く方は上手くいって、Shapes.BuildFreeformに、AddNodesコマンドで10点頂点を追加して、
楕円を書きました。

続いて、頂点の編集を行うべく、書かれたshapeのnodesや、Verticesで頂点情報を取得したら、
なぜか30点あります。ベジェ曲線で描かれた頂点の座標はもう残っていないのでしょうか??
0546デフォルトの名無しさん
垢版 |
2018/03/15(木) 07:48:53.70ID:O8Mn8lcP
>>545
コード貼ればレス付くかも
0547デフォルトの名無しさん
垢版 |
2018/03/24(土) 15:42:57.45ID:5WWUtLn7
こんにちは。
VBA初心者です。
Excelで知恵袋のような社内用のQ&Aを作成中です。
質問フォームに入力すると質問が縦に書き込まれていくところまで作りました。
しかし回答を質問に対応させることができません。
回答は対象の質問の横に入力されていくように作りたいですが、どうしたらよろしいでしょうか。
教えて下さい。

分かりづらいかもしれませんが、下記のように作りたいです。

質問1 回答1 回答2 回答3…
質問2 回答2-1 回答2-2…
質問3
0550デフォルトの名無しさん
垢版 |
2018/04/26(木) 06:16:16.15ID:5eP/vpMI
htmlからidやnameに属さない、独自の名前を付けられた値を取得したいです。
<li id="result_1" result-rank="1" data-original="hoge">
<li id="result_2" result-rank="2" data-original="fuga">
・・・
<li id="result_123" result-rank="123" data-original="hage">

data-original="hoge"の「hoge」を取得したいです。
常にidのresult_1を取得したいわけではなく、またidの値も検索結果によっては変動します。
data-originalは必ずliタグの中にあります。
htmlは変更できません。

ウィザード級の方々何卒お力をお貸しくださいませ。m(_ _)m
0551550
垢版 |
2018/04/27(金) 04:34:25.39ID:HRYENVs1
自己解決しました。
0552デフォルトの名無しさん
垢版 |
2018/04/27(金) 17:39:47.51ID:Ewgb7+aM
ExcelVBAの質問です
adodbStreamを使って、jisコード(ISO-2022-JP)で書かれたテキストファイルを読み込んで色々するマクロを作っています
対象のテキストは1行120バイトのレコードが何行も含まれるという体裁になっているファイルです
このファイルを入力ファイルに指定したところ、なぜか3行目のみ最初の12バイト分が読み込まれません
レコードの内容を変えて何度か試してみたのですが、決まって3行目のみ行頭の12バイトが抜け落ちてしまいます
adodbを使う際に何か必要なことがあるのでしょうか?
0553デフォルトの名無しさん
垢版 |
2018/04/27(金) 17:40:39.83ID:Ewgb7+aM
上げておきます
0554デフォルトの名無しさん
垢版 |
2018/05/07(月) 00:53:53.60ID:Zjii9/TV
Webにあるスクリプト入れても動いたり動かなかったり
厳しいね、これは。
0555デフォルトの名無しさん
垢版 |
2018/05/11(金) 11:32:55.94ID:Vbz54Hwk
ファミコンゲームを再現したいんですが、単純な構造のゲームってありますか?
0556デフォルトの名無しさん
垢版 |
2018/05/11(金) 12:17:07.84ID:Pz/tQeeR
シート1のA44:I44のセルの内容を、マクロでシート2の最後列に貼り付けていきたいです。
下記のマクロだと、シート1のA44のセルをシート2の最後列のAのセルにのみ、コピーするだけになってしまいます。
どう変更すればいいのか、よかったら教えて頂きたいです。
よろしくお願いします。

Sub テスト()
Dim LastRow As Long
With Worksheets("シート2")
LastRow = Worksheets("シート2").Range("A"&Rows.Count).End(xlUp).Row + 1
Range("A"&LastRow).Value=Worksheets("シート1").Range("A44:I44").Value
End With
End Sub
0559デフォルトの名無しさん
垢版 |
2018/05/23(水) 19:25:31.94ID:Au5e7VGg
僕の知り合いの知り合いができたパソコン一台でお金持ちになれるやり方
役に立つかもしれません
グーグルで検索するといいかも『ネットで稼ぐ方法 モニアレフヌノ』

HCSP8
0561デフォルトの名無しさん
垢版 |
2018/05/30(水) 16:34:41.89ID:C5TotkC4
VBAってリボンにメニューを作成出来る?
0563デフォルトの名無しさん
垢版 |
2018/05/31(木) 22:00:54.69ID:mTNxmz5w
出来ないだろ
0564デフォルトの名無しさん
垢版 |
2018/05/31(木) 22:10:43.12ID:tlOTml64
シートにボタンがいくつかあって、押したときの処理が結構複雑なんです
とりあえずclickedをシートモジュールに書いて、そこから呼び出される関数も全部シートモジュールに書いたら分量がすごいことになりました
やっぱりクリック検出だけにしぼって残りは全部標準モジュールにすべきなんですかね。そのシートでしか呼び出されないわけで分けるのも分かりにくいような気もして
0565デフォルトの名無しさん
垢版 |
2018/05/31(木) 23:13:50.53ID:eZ3BghFT
>>563
Excel2003までのツールバーにメニュー追加するコードを書くと2007以降ではリボンにメニューが追加されるけど違う話かな?
0566デフォルトの名無しさん
垢版 |
2018/07/02(月) 19:23:11.48ID:kZ0RH16R
Access2016でコンボボックスの規定値をnullから1へ変更したくて
フォーム!コンボボックス.DefaultValue = """1"""とするフォーム上は1と表示されるんだが、プロパティーシート上は全く変化なくて、フォームをとじてから開くと規定値が変わっていなくてNullのまま。
VBAからは既定値の変更が出来ないのかな?
0567デフォルトの名無しさん
垢版 |
2018/07/04(水) 18:36:07.99ID:uOrTSuCX
フォームを閉じるときに変更を保存しなけりゃ普通に考えてもとに戻るわけだが
0569デフォルトの名無しさん
垢版 |
2018/07/04(水) 22:40:17.29ID:gFgZc5FG
5OK
0574デフォルトの名無しさん
垢版 |
2018/08/01(水) 19:27:32.96ID:sloNm1e3
Wordで読みとり専用推奨で保存されてるファイルをVBAで書き込み可で開いて編集して上書き保存したいんですが、やる方法はありますか?
0576デフォルトの名無しさん
垢版 |
2018/08/01(水) 22:05:26.28ID:oaZVWoyy
マジだったカオスと思ったが
開くと読み取り専用か聞いてくるのか

まあ、OS側でなくワード側で制御してそうだから、回避は厳しそうな気がする
0580デフォルトの名無しさん
垢版 |
2018/08/02(木) 00:14:28.59ID:isxfR7GW
>>576
VBAを使わずにファイルを開いてダイアログのウィンドウをつかまえて「いいえ」ボタンにメッセージを送るという力技ぐらいしか方法はないんでしょうか?

Excelでは開くときにIgnoreReadOnlyRecommenedというのを指定すれば良さそうなんですが
0583デフォルトの名無しさん
垢版 |
2018/08/02(木) 12:49:47.07ID:rM6odxjs
>>574
ありません。
Wordは手動でやるしかない。
Excelとは違いますから。
0584デフォルトの名無しさん
垢版 |
2018/08/02(木) 18:55:35.87ID:kRv3+o5C
>>580
VBAでもその力業で出来るけどね。
でも読み取り専用推奨で保存する目的はそのメッセージを出すことにあると思うからそれをスキップするコードを書くべきかという問題もある。
0585デフォルトの名無しさん
垢版 |
2018/08/02(木) 19:38:51.82ID:CFW8XzdE
>>582
すくなくともうちの環境では、ReadOnly:=Falseで書き込み可能で開いてるけど?
その状態からReadOnlyRecommended = Falseにして保存したら、読み取り専用推奨は外れてるが

まあうちの環境がかなり古いから最近では出来ない可能性もあるが
それホントに推奨なだけなのか?
0587デフォルトの名無しさん
垢版 |
2018/08/02(木) 21:07:22.34ID:CFW8XzdE
>>586
じゃあ2010から出来なくなったんだな
うちの2007ではできてるから

ただそこの文書
Note The following example applies to Word 2003 and 2002:
とか書いてあるな
Last Updated: Apr 19, 2018
らしいけど、適用対象バージョンがよくわからんな
0588デフォルトの名無しさん
垢版 |
2018/08/08(水) 01:24:38.39ID:vu1bVHsA
ACCESSでオートルックアップクエリを使用したフォームでマスタにないものを入力した際、
フィールドとキーが一致しているレコードをテーブルで探すことができません。
と出ますが、マスタにないデータを入力しようとしたとき、上のメッセージを出すことなく、マスタ登録用フォームを呼び出すにはどうすればよいでしょうか?教えていただけると助かります。
0589デフォルトの名無しさん
垢版 |
2018/08/22(水) 19:57:58.33ID:I61xiysx
スパークラインをVBAで挿入したいんだけど範囲指定のところがうまくいきません。
わかる方いたら教えてください。よろしくお願いします。

call cells(10 , h ).SparklineGroups.Add(xlSparkLine, "n5: n100")

"n5: n100" のところなのですが、 
range(worksheets(h).cells(14,5) , worksheets(h).cells(14 , G ))

のようにして ワークシートごとの数値群をスパークラインにしていきたいのですが、、、
何か良い方法を教えてください。
よろしくお願いします。
0590デフォルトの名無しさん
垢版 |
2018/09/02(日) 12:36:29.88ID:/2qGDDvp
質問 
Outlook2010なのですが
受信トレイの検索(Ctrl+E)で「請求書」を検索するのと同じ動作を
VBAにしたいのですがどのように記述すればいいのでしょうか
ボタンに登録して使うつもりです。

OutlookVBAを使うのは初めてでしてお手引きをお願いいたします
0591デフォルトの名無しさん
垢版 |
2018/09/02(日) 16:03:58.04ID:v7+8Ol2A
VBAで質問です
【前提】
・デスクトップにフォルダA
・フォルダAの中に9月1日分のExcelファイル"0901"とマクロ作動用の.xlsmファイル

【したいこと】
・フォルダAの中に9月2日分のフォルダ"0902"を作成
・"0901"を開き、B2セルの2018/9/1を2018/9/2に書き換え
・フォルダ"0902"内にファイル名を"0902"にして保存 


日毎のレポートのひな形を作ろうとしています
あまり知らないながら書いてるのですがエラー出まくりで泣きそうです
0592デフォルトの名無しさん
垢版 |
2018/09/02(日) 16:16:35.28ID:7fXcCHFS
>>590
Application.Searchメソッド、もしくは
Application.Session.GetDefaultFolder(olFolderInbox).GetTable(DASLクエリの引数) を使えば良いのでは
0593デフォルトの名無しさん
垢版 |
2018/09/02(日) 16:51:32.22ID:Q0JGCJ3q
>>591
悪いこと言わないから、手でやるか詳しい人に頼みなさい
複数のブックが同時に開かれている状態でのVBA処理には
いろいろ面倒なところがあり、経験が必要
5ちゃんでサクっと説明できるものではない
しかもフォルダ処理も伴っているので、エラー処理を含め
きっちり作ろうとするとけっこうな規模のアプリになってしまうと思う
0594デフォルトの名無しさん
垢版 |
2018/09/02(日) 17:27:55.14ID:1l6OdzeH
>>591
thisworkbook.path\フォルダA\0901を開いてあとはブック名から指定して必要事項を書き換え。
ブック名を指定してsaveAsで
thisworkbook.path\フォルダA\0902で保存。


蛇足だが、必要無くともブックもシートも常に指定した方が良い。
0596デフォルトの名無しさん
垢版 |
2018/09/02(日) 18:16:50.42ID:dkuRxOF+
おそらくやりたいことはこんな感じだろう。
0901ファイルを開いた状態で、9月2日当日にレポートを作成する前提。
0901ファイルを修正するという話だったからその通りにしたけど、本当ならここはテンプレートファイルから書き起こすようにするべきだと思う。
テスト実行してないので、エラーが出たらごめんなさい。

Sub CreateDailyReport

Dim Report As Workbook
Set Report = Application.Workbooks("0901")
'テンプレートから新規ファイルを作成するなら以下のように変える
'Set Report = Application.Workbooks.Open(テンプレートのパス)

Report.Worksheets("Sheet1").Range("B2").Value = Format(Date, "yyyy/mm/dd")

Dim PathString As String
PathString = Thisworkbook.Path & "¥" & Format(Date, "mmdd")

If Dir(PathString, vbDirectory) = "" Then MkDir PathString

Report.SaveAs PathString & "¥" & Format(Date, "mmdd") & ".xlsx"

Report.Close

End Sub
0598デフォルトの名無しさん
垢版 |
2018/09/02(日) 21:02:04.61ID:/2qGDDvp
>>592
Application.AdvancedSearchして
Searchオブジェクトを検索フォルダーにSaveするっていうことですかね

単純にVBAでCrtl+Eのクイックサーチ(?)する方法があればと思ったのですが
無理っぽいですね
ありがとうございました
0599デフォルトの名無しさん
垢版 |
2018/09/06(木) 16:40:58.45ID:KlP6yXrE
初歩的な質問でごめんなさい
うまくできません

If IsNumeric(myN) Then
Range("A1").Value=Range("A1").Value + myN

End If

myNが1の時と2の時があるとしてセルA1の値を3にしたいのですが
やってみると12っていう風に数字が並んでいってしまいます
どうしたらいいでしょうか
0600デフォルトの名無しさん
垢版 |
2018/09/06(木) 19:12:55.41ID:iNH/PWkM
>>599
もしmyNがString型、あるいはObject型に文字列データが入っている場合は数値型に変換する必要がある
Range("A1").Value = Val(Range("A1").Value) + Val(myN)
でいいんじゃないかな
0601デフォルトの名無しさん
垢版 |
2018/09/06(木) 19:23:08.77ID:KlP6yXrE
>>600
String型になっていました
参考にしてもっと勉強します
お付き合いくださりありがとうございました
0602デフォルトの名無しさん
垢版 |
2018/09/21(金) 21:15:16.71ID:Fm9zyYJ3
超初心者です。

Googleの検索窓に「VBA」と入力する サンプルコード
https://vba-code.net/ie/set-value-to-textbox/) を実行してみましたが、
objIE.document.getElementById("gbqfq").Value = "VBA"のところで
「実行時エラー 424 オブジェクトが必要です。」となって動きません。

「標準モジュールに以下のコードを追加して」の意味が分からないので、
標準モジュールをどう書いたらよいのか、どこに追加したらよいのかわからず
サンプルコードのみを実行しました。

どなたか親切な方、対応方法を教えてください。
難しいことはわからないので具体的にコードを書いてもらえると嬉しいです。
よろしくお願いいたします。
0604デフォルトの名無しさん
垢版 |
2018/09/21(金) 22:40:18.36ID:Fm9zyYJ3
>>603
ありがとうございます!
できました!!!
なんか分からないけど動いて嬉しいです!
頑張ります。
0605デフォルトの名無しさん
垢版 |
2018/09/21(金) 22:42:58.72ID:MqKbhYRD
>>604
おう頑張れ!わからんかったらまたいつでも聞いてくれな!
0606デフォルトの名無しさん
垢版 |
2018/09/21(金) 23:16:58.27ID:Fm9zyYJ3
>>605
ありがとうございます!

同じことを別のホームページでしたくて、
URLと入力するところを変えてみたのですが、
実行時エラー438 オブジェクトはこのプロパティまたはメソッドをサポートしていませんとなって動きません。
ホームページは

https://www2.smile-etc.jp/NASApp/etcmlg/MlgReq;jsessionid=0001kXELRCuGax2mjI7VtXa12rz:15fqn57ku?gvlddpef=1011100000&mdwsetmb=1011120000の画面でしたくて、


入力するところは
objIE.document.getElementsByName("Name1Kana").Value = "マイレージ"としてみました。

お時間あるときでよいので出来たらお願いします。

仕事で毎日同じような入力ばかりしていて自動化できるところをできたらいいなと思っているのですが、超初心者にはハードルが高くて難しいです 涙

'
0607デフォルトの名無しさん
垢版 |
2018/09/21(金) 23:29:19.39ID:m8DL5ZJ4
getElementById("gbqfq")
getElementById("lst-ib")

君は、この違いがわからないの?
HTML, DOM, CSS, JavaScript とか知らないの?

VBA には関係ないのだけど。
全言語・プログラミングに共通の話題なんだが
0608デフォルトの名無しさん
垢版 |
2018/09/21(金) 23:59:36.29ID:Fm9zyYJ3
>>607
すみません、わかりません。
0609607
垢版 |
2018/09/22(土) 01:01:33.83ID:DCTpeoPT
HTML に書いてある、ID だよ

ウェブページは、HTML(DOM), CSS, JavaScript で出来ている。
ブラウザでF12 を押すと、開発者ツールが起動するだろ

これらを知らないと、ウェブ開発はできない!

VBA とは、全く関係ない
0610デフォルトの名無しさん
垢版 |
2018/09/22(土) 03:52:07.76ID:AiTHsE5Z
>>609
>>609
知識もないのに場違いな質問をしてしまいすみませんでした。ご親切にありがとうございました。
0611デフォルトの名無しさん
垢版 |
2018/09/22(土) 09:42:45.32ID:AiTHsE5Z
>>606
自己解決して、自動入力マクロができました!ありがとうございました。
0615デフォルトの名無しさん
垢版 |
2018/10/12(金) 09:54:55.01ID:TjU2aakC
それにしても、なんで、マクロはFunctionしかcall出来ないんだろうね。
無駄にFunctionを作らないようにと英語の本には書いてある。Subで済むもをFunctionにするなと書いてある。
なのに、マクロの仕様のために、無駄にFunctionをつくったり、SubをcallするだけのFunctionを作ったりしないといけないのは間抜けな仕様だと思うがどうだろうか?
0619デフォルトの名無しさん
垢版 |
2018/10/12(金) 12:28:42.41ID:YStpcFYj
>>616
本当に?
ワークシートからDLL関数をCallするためのインターフェースだけはVBAネイティブのFunctionとして書かなきゃいけないと思ってた
ワークシートから直接C#ソースの関数をCall出来るってこと?

>>615
SubもCall出来る
というかSubは本来Subroutineのことを指すのでそもそもCallできなきゃおかしい
0621デフォルトの名無しさん
垢版 |
2018/10/12(金) 17:15:46.40ID:QO2uhWCP
VBAしか使わない人間は、WinAPI使わない人間はSubしかCallしない。
0626デフォルトの名無しさん
垢版 |
2018/10/12(金) 18:20:18.57ID:4bQjrfTH
ほんとに?MSのサイトに対処方法が書いてあったけどなあ。
仕事で使ってたmdbでエラー出まくってSubをFunctionに書き換えた記憶があるけどなあ
0627デフォルトの名無しさん
垢版 |
2018/10/12(金) 18:45:46.09ID:S2JrLclJ
意味が分からん。
ExcelだろうがAccessだろうが当たり前にできる。
やり方間違えてるだけだろ。

lngRet = FuncA("何かの引数")
Call SubA("何かの引数", "何かの引数2")
これはできる。

SubでCallを省いた場合に
SubA("何かの引数1", "何かの引数2")
とするのは出来ない。

Callを省く場合は
SubA "何かの引数1", "何かの引数2"
とする。
0628デフォルトの名無しさん
垢版 |
2018/10/12(金) 19:05:34.79ID:TjU2aakC
>>627
AccessとExceの用語の違いが問題かもしれません。
Accessだとマクロのデザインビューで新しいアクションの実行→プロシジャーの実行を選択→プロシジャー名を指定という流れです。
ここでSubを入れるとエラーになり、Functionを入れると実行されます。
全く同じ動作でもSubだとエラーでFunctionだと実行されるという謎仕様のことです。
0630デフォルトの名無しさん
垢版 |
2018/10/12(金) 19:39:49.69ID:wk7eAlWy
>>628
Accessマクロの「プロシージャの実行」機能は、Functionプロシージャに限ってアプリ経由でコールバックさせることができるっていう一種のリフレクション機能だから、仕様上Subプロシージャを呼べないのは当たり前

でも普通はVBAその他一般のプログラミング言語の話題でCallするとかコードを呼び出すとか言う場合、プログラムのコード中で他のプロシージャ(=メソッド)を呼び出すこと一般を指す
AccessだろうがCallステートメントでSubを呼べないわけがない

全然話してる内容が違う
0631デフォルトの名無しさん
垢版 |
2018/10/12(金) 19:42:56.49ID:4ERZBcjn
MSの提示する対処方法
https://docs.microsoft.com/ja-jp/office/client-developer/access/desktop-database-reference/runcode-macro-actionから抜粋
>>[!ヒント] Visual Basic で記述した Sub プロシージャまたはイベント プロシージャを実行するには、Sub プロシージャまたはイベント プロシージャを呼び出す Function プロシージャを作成します。
>>その後、 RunCode アクションを使用して、Function プロシージャを実行します。
0632デフォルトの名無しさん
垢版 |
2018/10/12(金) 19:47:22.51ID:4ERZBcjn
>>630
そうなんですか?Callという言葉の使い方が悪かったのですね。
Accessのマクロのプロシジャーの実行からSubを実行できないという表現が適切なんですね。
それにしても謎仕様ですね。いちいちCall_SubみたいなFunctionを作らないといけないなんて馬鹿らしいですよね。
Subを使うのを止めて戻り値を使わないのになんでもかんでもFunctionにしている人がいるのはこのあたりにも原因があるのでしょうかね。。。
0633デフォルトの名無しさん
垢版 |
2018/10/12(金) 20:06:27.08ID:a+EZTAPW
C#やJavaなどの言語にはfunction相当の構文しか存在しないから、それに合わせてるだけかも
0634デフォルトの名無しさん
垢版 |
2018/10/12(金) 20:12:42.89ID:Vm21lImY
サブルーチンというものは、マクロ上での繰り返し処理や重複処理が必要な場合に同じコードを何度も記載することを回避して、プログラムの再利用性と簡潔性とメンテナンス性を高めるためのもので一種の共通部品で呼び出して使えるためとても便利。
その代わり呼び出し側のコードが必ず必要。
0636デフォルトの名無しさん
垢版 |
2018/10/12(金) 20:43:31.86ID:xhA4Quty
たとえ1回しか使わなくても、機能ごとに分けて名前を付けることでコードの見通しを良くするという目的もある
0638デフォルトの名無しさん
垢版 |
2018/10/12(金) 23:40:27.93ID:kwtsHVW5
・Accessのマクロの「プロシージャの実行」機能は要するに「関数を実行する」ことに重きを置いている機能なので、関数ではないSubプロシージャは呼び出せない。
・「呼び出す」と「Callする」は意味が(あるいは受け取り方が)違うので下手に知ったかぶりしないこと。
0640デフォルトの名無しさん
垢版 |
2018/10/13(土) 14:18:57.90ID:7+viDhhJ
>>638
関数という言葉の定義次第ではSub Procedureも関数の一種になるぞ

あと、Accessマクロの実行機能に関する話題でマクロピッカーからプロシージャを直接選択して実行する操作を指して「呼び出す」とか「Callする」と表現する例は比較的稀だと思うぞ
0641デフォルトの名無しさん
垢版 |
2018/10/13(土) 18:29:35.77ID:hGe/e45K
数学的な定義だと関数は一対一の写像だから戻り値がないものは関数ではなくなってしまう
丸投げアウトソーシングとでも言えばいいのか
0642デフォルトの名無しさん
垢版 |
2018/10/14(日) 01:16:47.10ID:FNEdXER5
>>641
その理屈だと、Function Procedureが戻り値なしの記述を許容していること、戻り値と全く論理的な二項関係がない処理をFunction Procedureの中に書けてしまうことを考えた場合、Function Procedureが果たして関数と言えるのかどうかということの方が怪しくなる
0643デフォルトの名無しさん
垢版 |
2018/10/14(日) 18:45:30.05ID:+nd0Ta/b
それはプロパティとメソッドについても言えるわけで。
意味合いから使い分ければ良い。

Accessの仕事してるけどいわゆるAccessのマクロ機能は嫌いなので殆ど触ったことないな。
0644デフォルトの名無しさん
垢版 |
2018/10/15(月) 00:09:25.20ID:bvVmxQGC
>>640
マクロからVBAプロシジャを実行するのを、呼び出すと言うのはすごく一般的だとおもうが
むしろ呼び出す以外にどう言うんだ

>>642
戻り値を指定しないFunctionだって戻り値はちゃんとあるんだが
まあそもそもプログラミング上でいう関数は数学的定義の関数ではないんだがな

>>643
一般的なプログラム用語としてはそうかもしれんが
VBAや旧VB,VB.NET,C#なんかはプロパティはメソッドとは別な構文で定義されてる
VBAの話するならちゃんと区別しれ
0645デフォルトの名無しさん
垢版 |
2018/11/14(水) 18:28:17.85ID:yWBiOXbZ
vba初心者でわからないところがあって質問したいんですけど、ここで大丈夫ですか?
0648デフォルトの名無しさん
垢版 |
2018/11/14(水) 19:27:08.71ID:yRk1YRk6
>>647
その宿題をやるには「フォームの作成」という作業が必要で、それは文章だけの掲示板じゃとても説明できない
0654デフォルトの名無しさん
垢版 |
2018/11/15(木) 12:24:37.27ID:yIPB3Fsn
なきゃ学校にあるPC使うだけやんけ
変な事気にする奴やな
0656デフォルトの名無しさん
垢版 |
2018/11/15(木) 23:21:50.05ID:XqpfGkJo
VBAで3つ数値があった時、最大値を表示させたい時
下記URLのNo.4の回答のelseifを使ったものがありますが、
elseifを使わずにelseだけで表示しようとすると、
どのようになるのでしょうか?
宜しくお願いします

ttps://oshiete.goo.ne.jp/qa/5352661.html
0657デフォルトの名無しさん
垢版 |
2018/11/15(木) 23:28:15.36ID:XqpfGkJo
分かりづらそうなので追記で、下記のところです。
宜しくお願いします 
  a = 10
  b = 200
  c = 30

  Max = a

  If b > Max Then
    Max = b
  ElseIf c > Max Then
    Max = c
  End If
0660デフォルトの名無しさん
垢版 |
2018/11/16(金) 06:57:12.53ID:fQoG7lNZ
そもそも657では最大値求められないだろ。
なぜ他の2つと比較してから決めないのか
0661デフォルトの名無しさん
垢版 |
2018/11/16(金) 07:24:20.18ID:biDBAQdb
すいません、まだ初心者でまだ理解が追いついていなくて
とりあえず最大値求めるにはこういう形...とかで覚えようとしてて....頑張ります
0662デフォルトの名無しさん
垢版 |
2018/11/16(金) 07:30:47.41ID:1oL4uemZ
658でも最大値は求められない
試しに
a = 1
b = 2
c = 3
で試してみるといい。Maxが2になってしまう

Ifだけでやる場合の正解の一例
Max = a
If b > Max Then Max = b
If c > Max Then Max = c
0663デフォルトの名無しさん
垢版 |
2018/11/16(金) 07:35:16.96ID:1oL4uemZ
>>661
If Elseの構文は、最初のIfの条件が成立したらElse以降は処理されずEnd Ifまで飛ばされる
つまり、
a = 1
b = 2
c = 3
だった場合、
b > Maxが成立したらc > Maxの部分は飛ばされてしまうからMaxは2のまま終わってしまう
0664デフォルトの名無しさん
垢版 |
2018/11/16(金) 07:44:30.26ID:fQoG7lNZ
elseやelseifは先行条件でTrueにならない場合にしか実施されない仕組みなことを理解しましょう
0666デフォルトの名無しさん
垢版 |
2018/11/16(金) 09:26:27.62ID:RKO+v0zL
ID変ったかも知れませんが>>656です
皆さんありがとうございます

>>665
手痛いレスですが、出来るところまで頑張ろうと思います。プログラマーではないですが基本は覚えないと連携し辛い位置の役職のため頑張ります。
0667デフォルトの名無しさん
垢版 |
2018/11/16(金) 09:39:56.01ID:fQoG7lNZ
本当のプログラミング初学者なら仕方ない。制御構文なんてどの言語も似てるので、1つ覚えれば次は勘が効くようになるよ、長い目でがんばりなされ
0671デフォルトの名無しさん
垢版 |
2018/12/16(日) 00:58:32.35ID:SwJ6GlUb
>>668
わにわに
0672デフォルトの名無しさん
垢版 |
2018/12/16(日) 01:01:16.65ID:SwJ6GlUb
パニックを、5人がかりでやれば楽勝だろ、とか言ってるようなもの。
0675デフォルトの名無しさん
垢版 |
2018/12/26(水) 21:53:30.63ID:KrpjpPkw
VBA初心者です。少し長くなってしまいますが質問です。
・やりたいこと
1:現マクロ有効ブックのsheet1にフォームボタン設置する。
2:押すとC:\Users\Public\動物まとめ.xlsx をバックグラウンドで開き、その中のシート名"カピバラ情報"の E列4行目から5行目6行目...と、空白が来るまでの情報を取得しする。
3:現マクロ有効ブックに新しくsheet2を作り、その新シートのA1からA2A3...に取得した情報を書き込む。

現在のマクロは下記ですが上手くいかないです。
Option Explicit
Sub practice()
Dim i As Long
    i = 4
Dim fullPass As String
'セルのB3に C:\Users\Public\動物まとめ.xlsxと記述
fullPass = Range("B3")

Dim wb As Workbook
Dim Anothersheet As Worksheet

Workbooks.Open fullPass
Set Anothersheet = wb.Worksheets("カピバラ情報")
Sheets.Add After:=ActiveSheet
Range("A1").Select

Do While Cells(5, i).Value <> ""
 i = i + 1
Loop
Call wb.Close
End Sub

上手く情報を取得できないのでアドバイスお願いします。
0676デフォルトの名無しさん
垢版 |
2018/12/27(木) 00:53:04.14ID:coxr7jtk
>>675
wbに何も代入されてない。
AnotherSheetへの代入もこけるはず。
AnotherSheetが正しく生成されたとしても、その後使用されていないから何かとってこれるはずがない。
0678デフォルトの名無しさん
垢版 |
2018/12/27(木) 01:02:39.75ID:coxr7jtk
>>675
行列指定が逆?
5行目を右方向に評価してくような感じになってるけど、新規に作ったシートが対象になってるから、一周もループしてないよね?
0680デフォルトの名無しさん
垢版 |
2018/12/27(木) 01:16:51.54ID:coxr7jtk
>>675
バックで開いたつもりのブックに新規シート作っちゃってない?
ブックのフォーカスを制御するとか必要かも。
0681デフォルトの名無しさん
垢版 |
2018/12/27(木) 09:18:35.23ID:psUgzr4+
ID変わりましたが>>675です。

>>676>>680
遅い時間帯でありながら見てくださって
ありがとうございます。

色々と不十分だったのですね。
指摘箇所を直したりして
また報告しようと思います。
0682デフォルトの名無しさん
垢版 |
2018/12/27(木) 09:19:34.30ID:lhYnw8ev
>>675
最初に注意すべきなのは、いきなりRangeやCellsは絶対に使うべきじゃないってこと。
ちゃんと省略せずにWorkbookやWorksheetから書くようにする。
しかしそれだとコ―ドが長くなるのでそのために今回のコードのように変数で受けるかWith文を使う。

以下はスマホ上で書いてるんで動くかは不明です。
0683デフォルトの名無しさん
垢版 |
2018/12/27(木) 09:20:24.73ID:lhYnw8ev
Option Explicit
Sub practice()
Dim i As Long
Dim fullPath As String
Dim wb As Workbook
'Anothersheetじゃ分かりにくいんでopnShtに変更。
Dim opnSht As Worksheet
'追加シートは変数に受けないの?
Dim addSht As Worksheet

'セルのB3てどこ?
'多分ボタンのあるシートかなと推測。
fullPass = Thisworkbook.Worksheets("Sheet1").Range("B3").Value

'B3に出鱈目書いて動かしたらどうなるんだろう?
Set wb = Workbooks.Open(fullPath)
Set opnSht = wb.Worksheets("カピバラ情報")
With Thisworkbook
Set addSht = .WorkSheets.Add( After:=.WorkSheets("Sheet1"))
End With

'Range("A1").Selectって何の為に有るの?

'iの初期値を一番最初に書いてたけど、初めて見たとき何だか分からんかった。
'使う直前に関連処理と一緒にまとめた方が分かり易いよね。
i=4
Do While opnSht.Cells(5, i).Value <> ""
 i = i + 1
Loop
'元のCall wb.Closeなどという書き方をしたことが無いのでいつもの自分の書き方に変更。
wb.Close False
End Sub
0684デフォルトの名無しさん
垢版 |
2018/12/27(木) 09:22:53.65ID:lhYnw8ev
>>680
フォーカスを制御すべきじゃない。
いきなりRangeやCellsを使うから上手くいかないのであって、きちんとブックやシートから書けばフォーカスを制御しなければならないことは滅多に無い。
0685デフォルトの名無しさん
垢版 |
2018/12/27(木) 09:26:03.58ID:lhYnw8ev
早速間違いだ。
fullPassと書いてる所が一ヶ所ある。
fullPathに直しておいてね。
0687デフォルトの名無しさん
垢版 |
2018/12/27(木) 11:57:21.88ID:psUgzr4+
>>682‐685
ありがとうございます
深夜のご指摘から>>685まで参考にしていて

現在デバッグしてますが、“カピバラ種類”のシートが上手く取得できていないようです。
ちなみに
'セルのB3てどこ?
'多分ボタンのあるシートかなと推測。
その通りです、分かりづらくてすいません。

改行制限のためいくつかコメントは掲示板に書き込むとき省いてしまいました。

'Range("A1").Selectって何の為に有るの?
ですが 、新シートのA1から書き込む為に書きましたが、デフォルトでA1から書き込むみたいですので
無駄なマクロでしたね。
0688デフォルトの名無しさん
垢版 |
2018/12/27(木) 12:23:02.37ID:psUgzr4+
少し言葉足らずでした。
iのカウント(空白行までループ)は上手く出来ているので、現マクロ有効ブックの新シートに取得情報を
書き込めていないようです。
0689デフォルトの名無しさん
垢版 |
2018/12/27(木) 12:57:12.54ID:lhYnw8ev
>>688
うん?
Do〜Loopの中はiのカウントアップしてるだけなので、あなたが省略した(と勝手に思ってるんだけど)コードが動いていないということ?

念のためにいうと、元々のコードには情報を取得するコードが全く無いからこのコードだけじゃ取り込めないのは当たり前だよね。
0690デフォルトの名無しさん
垢版 |
2018/12/27(木) 13:47:48.84ID:psUgzr4+
すいません、
不覚に気づき、
dim j as long
j = 1
を追加し、ループを
Do While opnSht.Cells(5, i).Value <> ""
addSht.cells(j,1) = opnSht.Cells(i, 5)
j = i
 i = i + 1
Loop
にして上手くいきました、ありがとうございます。
0691デフォルトの名無しさん
垢版 |
2018/12/27(木) 13:57:20.08ID:psUgzr4+
細かい修正として
j = i
i = i + 1
の部分も
i = i + 1
j = i - ○
のようにして、
無駄にできてしまう空白もなくしました。

お付き合いしてくださった方、
ありがとうございました。
0692デフォルトの名無しさん
垢版 |
2019/01/03(木) 04:15:42.29ID:aAVkqECP
質問です
ワークシート上にすでに引かれている複雑な枠線をコードとしてどうにか変換というか取得できる方法はないでしょうか…
0694デフォルトの名無しさん
垢版 |
2019/01/03(木) 13:29:44.69ID:aAVkqECP
>>693
返事ありがとうございます
すみません、私の頭では理解できません…よかったらもう少し詳しく教えてもらえませんか
0696デフォルトの名無しさん
垢版 |
2019/01/03(木) 15:15:01.64ID:Em9anKIf
>>694
罫線を描く動作は理解できてる?
マクロ記録で簡単に調べられますよ。
例えば、2行2列選んで、縦横斜め全てに実線入れて
記録されたものを見ればどのような構造で描かれているのか
分かります。
記録の際は、xl〜の定数でよいですが、取得の際は数値で
返ってくるので注意。
調べたければオブジェクトブラウザで調べてもよいですが、
イミディエイトで、?xlThin みたいに簡単に確認する方法も
あります。
でも、取得して使うなら数値のままでもOKです。
ここまではOK?
0697デフォルトの名無しさん
垢版 |
2019/01/03(木) 16:26:50.99ID:+aY40et6
>>695
>>696
会社でとある先人の作ったエクセルのフォーマットがあるのですが、それを使って作業するおばあちゃんが度々壊してしまうのです
セル結合やセルの幅など複雑になっている物なので、壊してしまったパソコンの不得意なおばあちゃんはいつも四苦八苦していて、どうにか入力された数値以外の罫線や列幅などだけボタン1つ簡単に戻せるものを作ってあげたいと考えています

頂いたヒントを元にもう少し頑張ってみます
結局わからなければまた質問させてください
ありがとうございました
0698デフォルトの名無しさん
垢版 |
2019/01/03(木) 16:38:04.35ID:CdG5H8Qg
>>697
シートの保護じゃダメなの?
おばあちゃんには特定セルに数値入力させてるだけなんでしょ?
0699デフォルトの名無しさん
垢版 |
2019/01/03(木) 17:30:36.94ID:Em9anKIf
>>697
シート保護で十分みたいですね。
もし何らかの理由で保護できないのであれば、
同フォーマットの隠しシートから書式貼り付けした方が早そう。
セル結合もあるし、1セルずつ罫線情報取得とか効率悪すぎ。
0700デフォルトの名無しさん
垢版 |
2019/01/03(木) 22:01:21.27ID:aAVkqECP
>>698
>>699
それがわかりながらあらゆる所(不規則)を動かさないといけない時があったりで、保護だと都合が悪かったんです
フォーマット自体を大幅に変更できればもっと色々と簡単にできるのですが、それも他のおばあちゃんたちが前の方が良かった〜なんて必ず言うので見た目を崩すことはできません
担当のおばあちゃんorおばさんが変われば書式貼り付けのための範囲選択も上手くできないだろうから(全選択など知りません)また誰かが黙って長時間四苦八苦する事になってしまいます
無駄にすべて最初からやろうとしたりも平気であります
平均年齢49才の職場なので仕方ないんです
誰にも聞かずに戻したい部分を戻せるような、とーーってもわかりやすい説明付きのボタンをユーザーフォーム上にでもいくつか作ってあげたいと思っています
崩してしまうパターンはだいたい把握できているので、それが最善かなと…
0701デフォルトの名無しさん
垢版 |
2019/01/04(金) 02:06:01.37ID:+nkelZ7z
>>700
いや、だから隠しシートから自動的に書式修復をかければという意味で言うたのですが、、
トリガーはファイルオープンでも、ボタンでも。

試しにやってみたけど、罫線やセル結合は問題なく修復できるみたい。
入力規則とかは引き継げないみたいなので別にケアする必要があるかも。
行挿入、列挿入とかされて座標がかわるようなことされないならこれで十分では?

自分がよくやるのは、表のエリア毎に範囲名をつけて、そのエリア単位で最初に表組みした
ときと同じ要領で表作成を記録していき、コードを整理して修復マクロにします。
これなら起点となるセルが壊されなければ行挿入、列挿入にもある程度柔軟に対応
できるし、式や入力規則の修復も追加できる。
まぁ、利用者は作成者の想定を軽く超えてきますけどね。
0702デフォルトの名無しさん
垢版 |
2019/01/04(金) 08:59:12.57ID:jYRqvj54
>>701
理解力なくてすみません、、、
そしてありがとうございます
そのやり方を取り入れてとりあえず一度作ってみます!
0703デフォルトの名無しさん
垢版 |
2019/01/19(土) 20:28:43.04ID:gUifgf+0
ディム a アズ インテジャー
コンスト b アズ バリアント = ファルス

この読み方はあってますか?
0705デフォルトの名無しさん
垢版 |
2019/01/20(日) 08:43:51.62ID:KJwN8fo6
マジか!
自信なくなってきたわ。
フォー イーチ 〇 イン、スターコンブ、ブイビーナロウ、コンカット、
ナンバーフォーマットローカル、ドゥ ホワイル、イズナメリック、
デカー ファンクション セットウインドウロング リブ "ユーザー32" エリアス、
バイバル 〇 アズ ブーラン、アプリケーション.ハウンド、オプション エクスプリシト。
0714デフォルトの名無しさん
垢版 |
2019/01/31(木) 16:04:06.71ID:f4/Ws+Wz
パワポでExcelのVBAにある
Application.OnUndo
みたいなことって出来ない?
0717デフォルトの名無しさん
垢版 |
2019/02/01(金) 15:41:12.07ID:lbEDOgk3
>>716
そっちだね
あるいはパワポの内部変数(たとえば図形のRGB値とか)の変化を検知してイベント上げるとかでもいいんだけども
0718デフォルトの名無しさん
垢版 |
2019/02/01(金) 19:24:08.72ID:69So7CMb
質問スレでいつも思うんだけど、どんな状況でそれが必要なの?
Excelで出来るんなら、逆にExcelをパワポっぽく見せるという手もあるんじゃないの?
0719デフォルトの名無しさん
垢版 |
2019/02/02(土) 00:14:40.30ID:hkITps2T
勉強もかねてパワポのアドイン作ってるのよ
だからExcelじゃなくてパワポで出来なきゃ意味がない
その機能自体が必須で欲しい訳ではないから出来ないなら出来ないで諦める
0721デフォルトの名無しさん
垢版 |
2019/02/09(土) 00:13:31.38ID:nXE2v5Lv
Functionで値を返すのと、ByRefで返すの、どう使い分けたらいいのか、わからなくなってきた。
どっちでも返せる状況なら、どっちがいい?
0724デフォルトの名無しさん
垢版 |
2019/02/09(土) 04:25:25.62ID:6oInKB58
Function一択

ByRefは古い書き方で互換性のために残してる
これから作るプログラムには使うべきじゃない
0727デフォルトの名無しさん
垢版 |
2019/02/27(水) 18:52:45.21ID:0gstYK5t
sortのcustomorderって、セル値を入れられたりはするのでしょうか?
複数のセル値を優先順位としてデータを並び替えるマクロを作成したのですが動作が遅いので改善出来ればと考えています。(forとifで判定する手法をとっています)
よろしくお願いします
0729デフォルトの名無しさん
垢版 |
2019/03/19(火) 09:29:22.78ID:3/8oXV0g
VBAがどっとNet対応
キターーーー!
0732デフォルトの名無しさん
垢版 |
2019/03/19(火) 22:45:44.06ID:i2FNQUrb
さて、名前付き範囲ってVBA@Excelで使えないんだろうか。
もし使えたとして、実行時間はどうなのだろうか。
色々と謎が多い。
0734デフォルトの名無しさん
垢版 |
2019/03/20(水) 00:38:39.23ID:vmDq6MjZ
>>732
使えるよ
Application.Namesでコレクション取得して名前つき範囲にアクセスできるし、シートのRangeプロパティの引数ラベルとして名前をそのまま使ってセル取得できる
0735デフォルトの名無しさん
垢版 |
2019/03/20(水) 16:11:53.05ID:VkiUMgxP
>>733
横からだけど、どう面倒になるの?
0737デフォルトの名無しさん
垢版 |
2019/03/20(水) 21:06:17.96ID:ad3N4bFR
名前をキーにして名前付き範囲にアクセスするときはリスト形式になってるNamesコレクションの要素に対して正規表現か何かで逐次マッチ検索してるはずだから、名前付き範囲が増えれば増えるほどアクセスが遅くなる
0738デフォルトの名無しさん
垢版 |
2019/03/21(木) 01:35:24.94ID:XMapNPTs
なんで正規表現?
完全一致でいいじゃろ?
SortedListなら量に正比例して増えることはない
0740デフォルトの名無しさん
垢版 |
2019/03/21(木) 07:34:08.81ID:u3u8nbsq
>>737
> 正規表現か何かで逐次マッチ検索してるはずだから
なんだその意味不明な思い込みはw
普通に考えてハッシュなりB-Treeなり使ってるだろ
そもそも逐次検索だとしても遅さが気になるほど大量の名前付き範囲使う時点でなにか間違ってると思う
0741デフォルトの名無しさん
垢版 |
2019/03/22(金) 17:57:33.45ID:DJ7JSKt5
会社でブラウザの検索結果のページで
いっぱいURLのリンク先が表示されるのですが
そのたくさんのURLのそれぞれを開いたページ(毎回違うけど50ページくらいある)のデータを取得するVBAのコードを考えています。
IEの定番のCreateObject("InternetExplorer.Application")とDOMツリーの方法で実現できてはいるのですが
1つ1つページを開いて取得して閉じる、という作業がネットワークの遅さで異常に時間がかかります。
この複数のページを同時で取得する方法ってないでしょうか?よく知らないけどJavaでいうスレッドみたいな?
0743デフォルトの名無しさん
垢版 |
2019/03/22(金) 19:06:27.17ID:DJ7JSKt5
>>742
そりゃないよ、かあちゃん
0744デフォルトの名無しさん
垢版 |
2019/03/22(金) 19:28:02.41ID:s6oj+Xdm
>>741
VBAでマルチスレッドは基本的に出来ないと考えるべき。
物凄く不安定だし、Excelのオブジェクト(Rangeとか)を触った途端にExcelが消える。
で、マルチスレッドは出来ないけどマルチプロセスは出来る。

1.プログラムのブックに指定のURLのページの情報を取ってくるプロシージャを作る
2.複数のExcel.Applicationを使って、自分自身のブックを別のExcelから開くメインプロシージャを作り、その中でobjExcel.Runを使って情報を取ってくるプロシージャを動かすようにコードを書く。
3.ブックを保存する。
4.メインプロシージャを動かす

たぶん、こんな感じでできたはず。
0745デフォルトの名無しさん
垢版 |
2019/03/22(金) 19:35:54.55ID:DJ7JSKt5
>>744
ありがとうございます。
しかし、もし50個URLがあれば50個新しくExcel自体を起動しないといけないのですか?
そんなことしたら激重になってしまうように思うのですが。
0751デフォルトの名無しさん
垢版 |
2019/03/22(金) 21:25:13.65ID:uvzdlIQp
なんか勘違いしてるやつがいるけど、VBAがマルチスレッドじゃないことと、IEを複数開くのはまったく別のことだからな

IEはOfficeとはまったく無関係の独立したプロセスだから、いくつでもインスタンス化できるし同時にネットアクセスできる
IEオブジェクトを配列で作っといて、ページの読み込み完了を待たずにどんどん開いてけばいいんだよ
0754デフォルトの名無しさん
垢版 |
2019/03/22(金) 22:13:49.76ID:LAgBLCyu
IEにタブをいくつも開いてもらって、みんな読み込んだところでおもむろに順番に処理すればいいってことだろ。
0756デフォルトの名無しさん
垢版 |
2019/03/22(金) 22:38:21.07ID:DJ7JSKt5
>>750

>>751
その具体的な方法をコードで例示する形で教えていただきたいのでござるよ。

いまだと
Do While readyState < 4
Do Events
Loop
の待ちを50個のURLで1つ1つ順番にやってて
1つのURLを読んでデータ取って閉じる、というのをやるのが社内ネットワークが遅いため(データベースからの読み込みも含まれるからの)1つあたり1分近くかかってる。
だから異常に時間がかかる。
一気に全部同時にやれないかなと。
0759デフォルトの名無しさん
垢版 |
2019/03/22(金) 22:57:51.11ID:HaipTOms
そもそも回線が細いのはプログラムでどうこうできないから上司を説得して諦めてもらうしかない
0760デフォルトの名無しさん
垢版 |
2019/03/23(土) 01:14:24.21ID:BU4e6Kdq
趣味でやってるんじゃなかったら
適当なダウンロードソフト使ったほうが良いんじゃない
0761デフォルトの名無しさん
垢版 |
2019/03/23(土) 12:00:24.62ID:36Js1rz1
動くかどうか試してないけど、こんな感じでいいんじゃない?
もう少し効率を上げるなら、読み込めたページからさっさと処理してもいいし

Sub test()
  pg = 50   ' 同時に開きたいページ数
  Dim ie() As Object
  Dim url() As String
  ReDim ie(pg-1)
  ReDim url(pg-1)
'ここでURL設定
  For i = 0 To pg-1
    Set ie(i) = CreateObject("InternetExplorer.Application")
    ' ie(i).Visible = True  '表示しない
    ie(i).navigate url(i)
  Next
  Do
    flg = True
    For i = 0 To pg-1
      If ie(i).readyState < 4 Then
         flg = False
      End If
    Next
  Loop Until flg  '全ページの読み込み待ち
'ここで読み込んだページを処理
End Sub
0762デフォルトの名無しさん
垢版 |
2019/03/23(土) 15:33:38.79ID:BqJUz3fJ
>>761
ありがとうございます。
試してみます。
最初のFor Nextループがものすごく時間がかかりそうで楽しみです。
あと先日は説明の簡略化のためにシンプルに書いたけど
実は開いたURL内で、ある条件があると、さらにその親URL内のAリンクの子URLも開かないといけない複雑な事情があるのです。
0763デフォルトの名無しさん
垢版 |
2019/03/23(土) 19:47:18.63ID:h2FSWEPH
>>761
Exit For抜けてますよ
フラグも i = pg-1まで行けたときに立たせるだけで十分だと思います

あと、非表示でIEを50立ち上げると中断した時のプロセスの掃除が大変なので、Ajaxで無ければXMLHTTP60を使うのも手かもしれません。
0764デフォルトの名無しさん
垢版 |
2019/03/24(日) 00:51:51.95ID:gZMjxNOF
>>752
まさかIEオブジェクトの読み込み動作がVBAのスレッドで処理されてると思ってるのか?
>>753
終わりじゃないので考慮点はある

コード書こうかと思ったけど、>>761さんが書いてるからまあいいか
読み込み完了の検出とかどうするか悩みどころではある
イベントハンドラの動的設定か、せめてWithEventsが配列にも宣言出来ればなぁ

まあ50も多重化してもオーバーヘッドかかるだけで高速化しない気がするから
数個固定で持たしてイベントハンドリングするのが現実的かもしれん
0765デフォルトの名無しさん
垢版 |
2019/03/24(日) 01:34:57.18ID:Y3S3b5Ai
この場合Do Loopを抜ける条件が全ページの完了だから、Exit Forはあってもなくても結果というかスピードは変わらないね
さっさと抜けたところで、またForループに戻るだけだし

個人的には「pg - 1」が何回も出てくるのが美しくないなあとか、ForとDoの順番を逆にした方がコンパクトになりそうだなあとか
0766デフォルトの名無しさん
垢版 |
2019/03/24(日) 01:38:23.22ID:Y3S3b5Ai
一括処理なら、この方がコンパクト
まあ、ホストの応答速度や、次の処理の内容次第では終わったページからどんどん片付けた方がいいだろうけど
For i = 0 To pg-1
Do
Loop Until ie(i).readyState >= 4
Next
0767デフォルトの名無しさん
垢版 |
2019/03/24(日) 08:29:39.64ID:myNgr9GS
>>765
> 個人的には「pg - 1」が何回も出てくるのが美しくないなあとか
C言語とかに慣れてるんだろう
VBA的には
ReDim ie(1 To pg)
ReDim url(1 To pg)
For i = 1 To pg
だろうね
可能であればieとurlをTypeで纏めてそれを配列にした方が見易い
0769デフォルトの名無しさん
垢版 |
2019/03/24(日) 10:28:46.47ID:3PVCt58k
>>766
それだとサイズのでかいページで待ちが発生する

Do
For i
If ie(i)準備完了 And i.処理フラグFalse then
処理
処理フラグTrue
カウント
End if
Next
カウント=50 exit
Loop
0770デフォルトの名無しさん
垢版 |
2019/03/24(日) 10:33:07.42ID:Mw3X0nZC
>>769
投げてからの待ちだからいいんじゃねえの?
俺はやったことないから知らんが、投げたらあとはIEが並行処理で取ってくるんだろ
で全部取ってから次の処理なら問題ない
でかいページでVBAが待っていても同時に他のページもIEが取って来てるんじゃねえの
だからでかいページで待っていてもそれが終わったら他の軽いページも取り終っていてあとは
ばたばたと進んで終了、と理解している
0771デフォルトの名無しさん
垢版 |
2019/03/24(日) 10:52:55.88ID:Mw3X0nZC
>>769
ああ、すまん。それがわかってる上で待ち時間がもったいない、ということね
>>766もそこは注意書きはしているな
0772デフォルトの名無しさん
垢版 |
2019/03/24(日) 10:56:37.24ID:OZ1kvGmt
IEはマイクロソフトも使うなって言ってるのに
VBAって不便だよね
0773デフォルトの名無しさん
垢版 |
2019/03/24(日) 11:58:25.29ID:yYEn14s6
IE使えなくなったら、どうやってブラウザ制御するの?
UIAutomation面倒くさいかから、
0775デフォルトの名無しさん
垢版 |
2019/03/24(日) 12:34:48.16ID:4ve/ST91
IE使えなくなったらってもう使ってる人なんていない
セキュリティに甘いとこは使えるのか?
0776デフォルトの名無しさん
垢版 |
2019/03/24(日) 13:28:35.85ID:Y3S3b5Ai
ちゃんと動くのか試してみた
たしかにIEが複数開いて、平行処理でページを取ってくるね
VBAのシングルスレッドとか完全に無関係やん
0778デフォルトの名無しさん
垢版 |
2019/03/24(日) 13:36:50.26ID:PYh3zpOu
大昔からあるファイルシステムだって非同期読み書きできる
1000倍遅いネットワークで出来ないはずがないだろうが
0780デフォルトの名無しさん
垢版 |
2019/03/24(日) 14:55:03.02ID:gZMjxNOF
現実的には50並列で全ページ完了待ちするのはどうもなぁ

あと全力でループまわして完了待ちするのも無反応になるんじゃね
とりあえずDoEvents挟もうぜ

>>776
スレッド以前に、IEオブジェクトが別プロセスだから
アウトプロセスのCOM使うのはVBAで並列やる、おそらく安全で簡単な唯一の方法
まあCOM作る方は大変だがな

>>777
OSがサポートしてるだけで、VBAから使えるかどうかとは別の話
VBAで非同期並列やりたければ、基本的にはイベントベースでしかサポートされていない
0781デフォルトの名無しさん
垢版 |
2019/03/24(日) 17:00:18.75ID:cASdygc2
>>776
これ、1つずつ待つ部分がVBAでマルチにしたいって話だったけどCreateObjectで既に別プロセスだから全部投げてから全部の完了を待つので正解なんだよな。

勘違いしてマルチプロセスでやろうとしちゃったよ。
ついでにApplication.Runで出来なくて、迷ってたんだけど、またまた勘違いでApplication.OnTimeが正解だった。
でもOnTimeって戻り値が取れないんだよな。
0782デフォルトの名無しさん
垢版 |
2019/03/24(日) 17:02:38.91ID:cASdygc2
あと、ExcelVBAスレにあるようにInternetExplorer.Applicationじゃなくて別のオブジェクトの方が早いと思うよ。
0785デフォルトの名無しさん
垢版 |
2019/03/24(日) 21:00:07.33ID:IVIO7oct
取りあえず書いてみたんだが、1つずつ待っても速度が変わらん。
テスト用に繋げた所があんまり時間が掛からん所でReadyStateのループに入らんのよ。

取りあえずInternetExplorer.Applicationはやっぱり遅かった。
59個のURLから同じ場所にある特定のデータを取ってくる処理でMSXML2.XMLHttpなら5秒のところIEだと60秒くらい掛かった。
0786デフォルトの名無しさん
垢版 |
2019/03/24(日) 23:42:52.24ID:Y3S3b5Ai
IEを普通にUIを持ったアプリケーションとして開けば、クッキーや画面のレンダリングからアクセス履歴の更新やキャッシュの整理までいろんな処理が走るから、そりゃ実質GETだけのXMLHTTPと比べたら遅くなるのは当たり前と言うか

>>785
画像検索にそれぞれ違うキーワードを設定すれば、それなりに時間がかかるようになるから負荷のテストにはおすすめ
0787デフォルトの名無しさん
垢版 |
2019/03/25(月) 08:15:58.30ID:O3TyiYmg
>>786
そんなことは知ってるが、ここの話で具体的なのがIEだから、いやいや、IEはこんなに遅いですよと注意喚起したんだよ。

まあ、Script関連でIEじゃないと駄目な場合もあるけどね。
0788デフォルトの名無しさん
垢版 |
2019/03/25(月) 21:50:57.49ID:D+uIa6Au
真のエクセラーならieなんか使わずにwebクエリーとか使って何とかするべきだろうが
0789デフォルトの名無しさん
垢版 |
2019/03/25(月) 23:08:06.35ID:DuFQaNpH
getElementByもWebクエリも使ったことあるけど、
Webクエリはどうやって取ってきてるのか謎。
0791デフォルトの名無しさん
垢版 |
2019/03/26(火) 00:39:52.05ID:ke9zWH00
誰もSelenium basic使わんの?
IE使わなくていいしセッション維持とかも楽だぉ?
0792デフォルトの名無しさん
垢版 |
2019/03/26(火) 18:58:02.34ID:ADoE3fhW
readystateが信用ならんのがな
completeになっても完全に読み込めてなくてその後の要素取得処理に失敗とか高確率で起こるし
WinHTTP使うのが確実だと思う
0793デフォルトの名無しさん
垢版 |
2019/03/26(火) 22:23:16.17ID:0P7j5sat
>>791
x だぉ
o だよ
正しい日本語を使いたまえ
0795デフォルトの名無しさん
垢版 |
2019/03/27(水) 00:00:47.48ID:sk2gWEk1
>>794
x 結局Do LoopとOn Error Resume Nextで逃げるしかないっていう。
o 結局Do LoopとOn Error Resume Nextで逃げるしかないっていうことですね。
正しい日本語を使いたまえ
0798デフォルトの名無しさん
垢版 |
2019/03/27(水) 07:39:47.73ID:qB5RyyD6
では、教えてくれ。
正しい日本語の"正しい"とはなんのことだ。
先に言っておくが、国語辞典や義務教育は関係ないぞ。
0800デフォルトの名無しさん
垢版 |
2019/03/27(水) 12:48:07.16ID:Mdwmg5PN
>>798
国語辞典や義務教育関係ないと言うのならば口語体でも問題ないと思うが…。
例えば力不足、役不足のように意味を間違えて使っていては当然正しい日本語ではないが、今回の様な場合では相手方に伝われば良いということにならないか。
0803デフォルトの名無しさん
垢版 |
2019/03/28(木) 21:53:50.06ID:cIkPDI6N
>>796
x 口語体が理解できないやつが正しい日本語とか
o 口語体が理解できないやつが正しい日本語とかどういうこと?
0804デフォルトの名無しさん
垢版 |
2019/03/28(木) 23:24:25.12ID:Q+Q3MpKo
長いのでWithするかSetしましょう。

With 口語体が理解できないやつが正しい日本語
  とか = ×
  とかどういうこと? = 〇
End With
0805デフォルトの名無しさん
垢版 |
2019/03/28(木) 23:39:02.51ID:cIkPDI6N
Sub CorrectJapanese()
Dim text As String
Dim inputText As String
text = "口語体が理解できないやつが正しい日本語とか"
inputText = InputBox("あなたの日本語は?")
If inputText = text Then
MsgBox "アホ"
ElseIf inputText = text & "どういうこと?" Then
MsgBox "そのとおり"
End If
End Sub
0806デフォルトの名無しさん
垢版 |
2019/03/28(木) 23:57:12.09ID:OmRArJOr
日付フィルターを使うときにCriteriaに設定する値って、必ず一旦Double型に型変換したDate型データをもとにしてFormat変換しなきゃいけないのかな?
Date関数の戻り値をそのままFormat変換してもうまくフィルターがかからなくて危うくハマりかけたんだが、後学のために識者がいたら教えてほしい
0808デフォルトの名無しさん
垢版 |
2019/03/29(金) 00:47:46.11ID:MmeaYZo8
>>807
x まともなレスには異論返せないのな
o まともなレスには異論返せないのね
0814デフォルトの名無しさん
垢版 |
2019/03/30(土) 09:25:26.20ID:Fw0ogXHz
VBAで実行時にシンタックスエラーが出るのはどういう場合だろう
デフォルト設定だと1行入力ごとに構文解析するし
0815デフォルトの名無しさん
垢版 |
2019/03/30(土) 09:27:30.74ID:uS2atdcl
>>814
それ、1行ごとの構文解析だろ
For Next Do Loop If End If
のチェックまではしてないと思うぞ
0816デフォルトの名無しさん
垢版 |
2019/03/30(土) 09:28:29.64ID:uS2atdcl
ああすまん。これってシンタックスエラーではないんだっけ
でもエラーになるよね
0817デフォルトの名無しさん
垢版 |
2019/03/30(土) 09:41:55.36ID:Fw0ogXHz
Nextを書かなかった場合は
「コンパイル エラー:For に対応する Next がありません。」
だった

もしシンタックスエラーのエラーコード(変数Errの値)が存在すれば出る可能性があるってことだと思うけど、コードの一覧てどこにあるんだ?
検索してVBのは出るけどVBAのが見つからん
0818デフォルトの名無しさん
垢版 |
2019/03/30(土) 09:49:53.73ID:uS2atdcl
シンタックスって言葉自体は構文規則だけど、コンパイルエラーって出るんだね
0819デフォルトの名無しさん
垢版 |
2019/04/06(土) 00:50:26.14ID:ocPEvB9Z
ExcelVBAでListViewを参照設定で追加して
フォームに配置して使っているんですが、
別フォームからshowしてすでに項目をいくつか追加してある
ListViewのあるフォームを表示したときに
ListViewをアクティブ(そのままの状態から矢印キーで項目を選択できるようにする)
にすることは可能ですが?
例えば

Public Sub UserForm_Active()
With listview1
.ListItems(1).Select
.SetFocus
End With
End Sub

とした場合に、フォーカスは確かにListView1にあるのですが、
その状態では項目が矢印キーの上下で選択することができません。
ListView1.SetFocusではListView1全体にフォーカスはあるが
肝心の中身の項目にはフォーカスがない状態ということなのでしょうか?

なにかよい方法はありますでしょうか?
0823デフォルトの名無しさん
垢版 |
2019/05/10(金) 13:15:01.20ID:SsAAf7AE
VBA勉強中のものです。

Setステートメントを勉強しているのですが、オブジェクト型についてお聞きしたいです。RangeオブジェクトとかWorksheetオブジェクトなど、いろんなサイトなど見ても使いどころがよくつかめてないです。

どんなときに使うのか、教えてもらえるとありがたいです。
0825デフォルトの名無しさん
垢版 |
2019/05/12(日) 02:32:02.86ID:0u/cIV/f
>>823
オブジェクトなら同じものを頻繁に扱うときにコーディングミスをしにくくなる。

毎回、名前でアクセスしていると、ちょっとしたことで、別のものを間違って扱う可能性が高まって、実行時エラーを発生させやすくなる。

定数化していれば防げるが、定数のスコープを大きくしないといけないので、定数の値を変えるときにあっちこっちを確認しながら、直すことになり面倒なことになりやすい。
0826デフォルトの名無しさん
垢版 |
2019/05/13(月) 13:34:22.56ID:p6Zrf1zY
object型の初期状態はNothing
参照先が存在しない場合もNothing返るのがあってis式で判定できる
一方でvariantの初期状態はemptyなのでis式がエラーになる
0827デフォルトの名無しさん
垢版 |
2019/05/13(月) 18:12:50.85ID:/95lNMvT
オブジェクトの値がNothingかどうかで判断するロジックはセンスがいいとは思えない。
0829デフォルトの名無しさん
垢版 |
2019/05/13(月) 23:46:53.76ID:4/CDP/BQ
自分で変数の値をコントロールしているのに、Nothingかどうかをあちこちで確認しているクソプログラマと1年前に仕事した。
0830デフォルトの名無しさん
垢版 |
2019/05/14(火) 08:31:35.00ID:BLcva127
>>827
ライブラリ側は何で判定すべきなんだ?
それともNothingを渡されたら挙動は未定義とするとか?
0831デフォルトの名無しさん
垢版 |
2019/05/14(火) 11:18:55.94ID:4FRIObo4
>>830
そのライブラリは他人が作ったものなのか?自分が作ったものなのか?
0833デフォルトの名無しさん
垢版 |
2019/05/14(火) 12:37:11.77ID:W+bs/bzK
ライブラリに状態を持つプロパティがあればいい。

他人が作ったものを使うしかなく、オブジェクトがNothingかどうかでしか判断できないのなら、そうするしかない。
0835デフォルトの名無しさん
垢版 |
2019/05/14(火) 16:16:33.74ID:E8REZJpG
いきなりライブラリと言われても何のことやらわからない。
0836デフォルトの名無しさん
垢版 |
2019/05/14(火) 17:30:53.68ID:UTGAJPws
>>835
>>827 が「オブジェクトの値がNothingかどうかで判断するロジック」って言ってるじゃん。
ある関数がオブジェクトを受け取ったときの判断方法の話だと思うんだけど、
自分はライブラリ作者なのでその場合どうするのがいいのか気になった。
0838デフォルトの名無しさん
垢版 |
2019/05/14(火) 22:22:18.25ID:jcYCvcdA
>>837
エラーとは限らないけど変数の状態に応じて処理を分けたいと言うのはある。
空のオブジェクトに対してはまた空を返すとかね。
>>829の言ってることはわかるんだけど、>>827>>828の主張がわからん。
Nothing判定はシンプルだけどTypeNameやenumだともっと分岐のパターンが増えちゃうじゃん。
0839デフォルトの名無しさん
垢版 |
2019/05/14(火) 23:23:54.78ID:+OBjJPst
>>836
世の中、変なやつがいて、オブジェクト変数に値をセットして、何も変わるはずがないのに、直後にオブジェクト変数の値がNothingかどうか判定するコードを書くやつがいる。
0840デフォルトの名無しさん
垢版 |
2019/05/14(火) 23:30:59.65ID:KmX6ljlC
代入が成功したかどうか確認するテクニックも存在するから、そういう分野からの転職かな?
具体的には、コンパイラの型チェックを使った裏技だったり、ハードウェアの故障チェックなんかで使われる
0841デフォルトの名無しさん
垢版 |
2019/05/15(水) 00:37:47.48ID:yOOg6UjC
直後であってもサブルーチンに分かれてるなら
入力情報のチェックを行うのは普通のこと
0842デフォルトの名無しさん
垢版 |
2019/05/15(水) 02:24:21.58ID:MwugOkQt
なんか例のCプログラマがしつこいけど、いまどき関係ない別プロセスがメモリ上の値を書き換えたりするミスは、OSレベルでもCPUレベルでもあるので、持論を批判されていると思って反論しなくていいよ。

ここは漠然としたVBAのスレッドだから、見ているひとにはあなたの言うことは難しくて理解できないと思うよ。

スルー力がないのか、寂しくてかまってほしいのか知らないけど、要はクソコードを書くなと言ってるだけだ。
0843デフォルトの名無しさん
垢版 |
2019/05/15(水) 02:28:07.88ID:MwugOkQt
なんでVBAスレで組み込み系のショボいハードウェアでのプログラミングを語っているのか?

ハードウェア、OS、ミドルウェア、プログラミング言語によって考え方やどこまで想定するのかは全然、違うからいっしょくたにしないでもらいたい。
0844デフォルトの名無しさん
垢版 |
2019/05/15(水) 02:29:01.28ID:O3OiMSIx
一般ユーザー権限のアプリで別プロセスのメモリにアクセスできたのは、平成どころか昭和時代の話ですよ、おじいちゃん
希にOSやCPUのバグ騒ぎが起きますが、そんなのは例外中の例外なんで普通は気にしなくていいことです
0845デフォルトの名無しさん
垢版 |
2019/05/15(水) 02:37:35.16ID:MwugOkQt
Windows 95、98、98SE、MeがいつのOSかもわからないのか
0848デフォルトの名無しさん
垢版 |
2019/05/15(水) 20:12:16.23ID:XVltvZnu
せっかくのイベントなのにPrivateにしたら星飛雄馬のクリスマスパーティーみたいになるじゃん
0850デフォルトの名無しさん
垢版 |
2019/05/15(水) 20:49:39.00ID:WHH9UP0v
何か面白いこと言った?
全然わからない。
興味あるからなぜ面白いか教えて?
0852デフォルトの名無しさん
垢版 |
2019/05/16(木) 14:30:12.55ID:wWtnEH3A
コード書く画面を
背景は黒に、文字は白に、する方法を教えれ
0855デフォルトの名無しさん
垢版 |
2019/05/23(木) 22:41:23.89ID:ufKYoT27
Wordで文字置換をしたいのですが、特定のフォントの文字列を検索して、文字列は変えずにフォントだけ変えたいです。半角を全角にしたいのですが可能でしょうか。ヒントだけでも教えていただけると有り難いです。
0856デフォルトの名無しさん
垢版 |
2019/05/23(木) 23:01:54.16ID:ubNtK04k
>>855
できる
任意のRangeのCharactersのフォントを一字ずつ調べて、探しているフォントが適用されている文字が見つかったらその文字のフォントを修正すればいい
半角から全角に変換するにはStrConv関数を使用し、第2引数conversionには列挙定数のvbWideを指定する
0859859
垢版 |
2019/05/28(火) 16:00:47.95ID:JWvhlEsx
Findを利用したコードについて教えて下さい。

書籍、サイトで掲載されていたコードを利用し、少し変えたものです。
Findメソッドを使ってC列の”たろう”を検索します。
探し出したら、A〜C列の文字列をE列に結果を返すように作り替えてみましたが、結果がE1〜G1に上書きされてしまいます。
Cells(Rows,count を理解しきれていない、11行目のCells(i,”E”)の部分も理解していないと感じます。
どのように違うのか、ご指導お願いします。


ワークシートはこんなかんじ E列からG列は実行後の結果をイメージしたものです
  A  B   C   D  E    F  G
1 日付 売上 担当者    000  AAA たろう
2 000 AAA たろう     333  DDD たろう
3 111 BBB はなこ
4 222 CCC たかし
5 333 DDD たろう
6 444 EEE はなこ
7 555 FFF くみこ
0860859
垢版 |
2019/05/28(火) 16:01:28.69ID:JWvhlEsx
859の続き

Sub Find()
Dim temp As Range, tempAddress As String, i As Long

With Range("A1").CurrentRegion.Resize(, 1).Offset(, 2)
Set temp = .Find(what:=“たろう”)
If Not temp Is Nothing Then
tempAddress = temp.Address
i = Cells(Rows.Count, "E").End(xlUp).Row

Do
temp.Offset(columnoffset:=-2).Resize(, 3).copy Cells(i, "E")
Set temp = .FindNext(temp)
Loop While temp.Address <> tempAddress
End If
End With
End Sub

Sub copy()
Range("A:G").Clear
Worksheets("template").Range("A1:C7").copy Destination:=Worksheets("Sheet1").Range("A1")
End Sub
0863859
垢版 |
2019/05/28(火) 17:30:10.75ID:xKlK3b52
>>861
ファッ!それかも!
マジでありがとうです!
何かあったらまた聞きます
ホントありがとう、頭いい人!
0864デフォルトの名無しさん
垢版 |
2019/05/28(火) 18:33:24.92ID:1J9FOJWe
初心者です。
Wordのユーザーフォームを作りたいのですがExcelの書籍しかなくて詰みました。
Excelのセル番地『A1』に相当するのが『ActiveDocument .tables (1) .cell (1.1)』というところまで突き止めて、
とりあえずテキストボックスに打ち込んだ文字列をセルに転記するところまではできたのですが、それ以上のことができません。
例えば繰り返し同じフォームを使う前提で、古いデータを削除したい時、Excelならば
『Range("A1") .CleanContents』で済むっぽい(うろ覚え)ですが
これをActiveDocumentで再現するにはどうすればよいでしょうか。

まだ文法など全く理解できていませんが、素人目に『Range(”ActiveDocument .tables (1) .cell (1.1)”).Select .CleanContents』
などと書いてしまいたい訳です(当然、動きませんでした)
加えて、WordVBAを中心にお勧めの書籍などありましたら教えていただきたいです。
今の書籍は痒いところに手が届かず…
0865859
垢版 |
2019/05/28(火) 19:44:38.82ID:xKlK3b52
>>861
set temp = .findnext(temp)の下に
i=i+1を入れた所、できました。
本当にありがとう!助かりました(T^T)
0866デフォルトの名無しさん
垢版 |
2019/05/29(水) 00:12:19.46ID:S0wmSPvZ
>>864
定番は「最速攻略 Word マクロ / VBA徹底入門」
Word VBAの書籍やWEBサイトは選択肢が圧倒的に少ないから、基本がわかったらVBEのオブジェクトブラウザやネットでMSDNを見た方が確実
0872デフォルトの名無しさん
垢版 |
2019/05/30(木) 18:38:59.73ID:3bWSKYGB
>>870
いろんなソースで、色つけたり太字にしたり、用紙指定や段組みして印刷させる

炎上プロジェクトに突撃するのに必須
0873デフォルトの名無しさん
垢版 |
2019/05/30(木) 18:47:13.10ID:2aR1E9YD
>>864
'選択範囲内にあるテーブルの一行目以外をクリアします。
Sub clearSelectedTableData()
If Word.Application.Selection.Tables.Count = 0 Then
'MsgBox "Select Any Table!"
Exit Sub
End If
Dim t As Word.Table
For Each t In Word.Application.Selection.Tables
Dim r As Long, c As Long
For r = 2 To t.Rows.Count
For c = 1 To t.Columns.Count
t.Cell(r, c).Range.Text = ""
Next c
Next r
Next t
End Sub
0874デフォルトの名無しさん
垢版 |
2019/05/30(木) 19:32:14.84ID:2aR1E9YD
こっちのがスマートだった
'選択範囲内にあるテーブルの一行目以外をクリアします。
Sub clearSelectedTableData()
If Word.Application.Selection.Tables.Count = 0 Then
'MsgBox "Select Any Table!"
Exit Sub
End If
Dim t As Word.Table
For Each t In Word.Application.Selection.Tables
If t.Rows.Count > 2 Then
Dim r As Long
For r = 2 To t.Rows.Count
t.Rows(r).Range.Delete
Next r
End If
Next t
End Sub
0875デフォルトの名無しさん
垢版 |
2019/05/30(木) 19:50:35.91ID:2aR1E9YD
もし文字編集でcell()下位の.Rangeが省略されてるのを知らないと
cell.Range.Deleteの文字削除とcell.Deleteのセル削除が
使い分けができないので注意
0876デフォルトの名無しさん
垢版 |
2019/05/30(木) 22:47:58.04ID:JR52NV0g
>>871
そうだろうけど、
他のOfficeでも出来るんじゃないの?
拡張って参照設定の事でしょ?

>>874
マジかよWord Tableって・・。
ExcelでSQLが使えたり、Officeは割と何でもありだとは思っていたが・・。
0879デフォルトの名無しさん
垢版 |
2019/05/31(金) 00:35:41.84ID:/aDGaFpI
EmptyはVariant型の初期状態(何も入ってない)
セルの初期状態でもある
確認方法
新規ワークシートに対して、イミディエイトウィンドウで
Print TypeName(Cells(1,1).Value)
とすると
Empty
と表示される

Nothingはオブジェクト型変数にオブジェクトが代入されていない(結びつけられていない)状態

NullはExcelだと出番がないと思っていい
主にAccessでデータを扱う時にNullが必要な場面が出てくる
0880デフォルトの名無しさん
垢版 |
2019/05/31(金) 01:16:13.09ID:gZfVve3x
複数セルのRangeからプロパティとってくるとき不一致だとNullになるくらいやな
0881デフォルトの名無しさん
垢版 |
2019/06/02(日) 23:52:18.62ID:I/vPFDmN
ユーザーフォームの、複数のテキストボックス、
例えばオブジェクト名をtb1、tb2とかにしてループ文に組み込むということはできますか?
オブジェクト変数というのが関係しそうな気がするんですが、
テキストを読んでも理解できない…
0882デフォルトの名無しさん
垢版 |
2019/06/02(日) 23:56:26.76ID:56udfPFB
>>881
すべてのテキストボックスでループ。
目的のテキストボックス群で名前を元に絞り込みすりゃ良いんじゃね。
0883デフォルトの名無しさん
垢版 |
2019/06/03(月) 02:05:13.53ID:OjX7Po3D
普通はテキストボックスのTagプロバティに区別できるキーワード入れといて
For eachでUserform.controlsやると思う
0885デフォルトの名無しさん
垢版 |
2019/06/03(月) 13:44:44.83ID:DCISZKmM
>>881
オブジェクトの配列作って、という事だと思うけど
使うとしたらオブジェクト参照を保持したまま色々したい時ぐらいかも
値の参照とセットだけなら皆さん挙げられているcontrolsでやりますね
0886デフォルトの名無しさん
垢版 |
2019/06/08(土) 00:31:30.90ID:ycKO1KOa
vba スタンダード 、accessのおすすめの問題集ってやっぱり公式テキストでしょうか。
0887デフォルトの名無しさん
垢版 |
2019/06/08(土) 11:47:13.10ID:pWKWNjKi
エクセル Cells(1,1)
ワード   Cell(1,1)
        ↑
      は? 何でワードにはsが無い?
0889デフォルトの名無しさん
垢版 |
2019/06/08(土) 16:27:53.67ID:pA8BerVC
>>887
Word.Selection.CellsとかRow.Cellsとかあるで
Tableには.Cell(1,1)しかないがな
ちなCellsはxy指定できんがCellはxy指定必須や
エクセルのプロパティのほうが異常なんやで
0891デフォルトの名無しさん
垢版 |
2019/06/12(水) 21:19:56.07ID:Hop9ON+a
vba エキスパート は、excel ベーシック以外は公式テキストまだだから受験は待ったほうがいいですよね。
0893デフォルトの名無しさん
垢版 |
2019/06/24(月) 19:31:10.71ID:XS1zoxjN
以前word VBAの質問をした者ですが、その節はありがとうございました。
お陰様で処女作のユーザーフォームが完成しかかっているのですが、最終問題に難儀しています。
やりたい事:「保存」ボタンを押す→ActiveDocumentと同じ場所に「記録表」というフォルダを作成し、
その中に「"氏名”」というファイルを生成する。既に「記録表」のフォルダがあればフォルダは作成せず、
そちらにファイルを生成する。
なお、不特定多数のユーザーが使う前提です(保存場所を手打ちしたらユーザー名で詰む)

四苦八苦しましたが、ひとまず確認用にdesktopに生成しようとしてなんかユーザーフォルダの滅っ茶根深い場所に生成されたり、
推測で打ってみたメソッドが全く機能しなかったり(フォルダの有無を確認するようなのって何だろう)
なんというか、Excelのfxボタンみたいにメソッドの内容を教えてくれるやつ、ないんですかね…
ちなみに職場のPCはスタンドアロンでヘルプに繋がらず、自宅PCにはOfficeが入ってないです。
0894デフォルトの名無しさん
垢版 |
2019/06/24(月) 22:54:40.46ID:klKakRL3
>>893
オフラインヘルプインストールできなかったっけ… 見てみて

F2キーでオブジェクトブラウザが表示される
これ無しで開発なんてやってられない
0896デフォルトの名無しさん
垢版 |
2019/06/25(火) 08:17:29.97ID:uunD1dKc
>>893
デスクトップはエクスプローラーの左のとこにカタカナで出てるとこと同じやで
深いとこにできても、そちらから近道すればよろし
0897デフォルトの名無しさん
垢版 |
2019/06/25(火) 08:27:47.11ID:uunD1dKc
>>893
〉フォルダの有無確認
昔は Dir()だったけど、今は filesystemobjectかな。
参照設定も必要なので使い方も含めてggッテください
folderexists()
0898デフォルトの名無しさん
垢版 |
2019/06/25(火) 10:33:29.10ID:aRzPCUod
公式オフラインヘルプがあったのは2013だな

2016もオフライン版があるけど英語
https://github.com/OfficeDev/VBA-content/

基本的な機能は2013からあんまり変わってないから、2013用のヘルプを入れてしまうという手もある
使い勝手は悪いけど、いつでも参照できるという利点はあるから
0899デフォルトの名無しさん
垢版 |
2019/06/26(水) 09:21:12.11ID:IYAeNPRu
Activedocument.Pathで所在フォルダのパスが出せる
これとフォルダ名とファイル名繋げた文字列つくればSaveAs2の引数にできる
0900デフォルトの名無しさん
垢版 |
2019/06/26(水) 18:32:58.67ID:pdVAutd4
質問です。excel2016の並び替え機能で
漢字、かな(あ〜ん)、アルファベット(a〜z)で並べ替えて漢字の中でも「本店」を最上位とできませんかね?

降順だと上記並びなのですが、かな(ん→あ)、アルファベット(z→a)になります。
Custumorder に「本店」を入力すると漢字中で1番下になります。

よろしくお願いします
0903デフォルトの名無しさん
垢版 |
2019/07/04(木) 12:19:45.93ID:Siuy47lc
Wordの表で、
ActiveDocument.Tables(2).Select
みたいに選択したいのですが、どれだけ表を分割しても、
全ての表が  Tables(1) という扱いなようでエラーになります。
ひとつ前に似たようなものを組んだ時には問題なくTables(2)になりましたが、
それと構文上は全く違いはありません。
どうしたら Tables(2)という扱いになるのでしょうか。
0904デフォルトの名無しさん
垢版 |
2019/07/04(木) 22:43:55.95ID:lDcVSkIh
ユーザーフォーム内のコンボボックスにUSBの中にある画像一覧というフォルダ内の全ての画像名を表示したいのですがうまくいきません。
どのように変更すればよいか教えていただけませんか?
Private Sub UserForm1_load()
Dim myList As String
Dim myPath As String
Dim iName As String

myPath = "D:/画像一覧/*jpeg"

fName = Dir(myPath & "*.jpeg")
Do While iName <> ""
If myList <> "" Then
myList = myList & " " & iName
Else
myList = iName
End If
iName = Dir
Loop

If myList = "" Then Exit Sub
myList = Split(myList)

ComboBox1.List = myList
End Sub
0905デフォルトの名無しさん
垢版 |
2019/07/05(金) 02:42:43.50ID:grV1bh4s
取得するのが D:/画像一覧/*jpeg*.jpeg になってるとか
fName は iName の間違いじゃないのかとか
myList は String なのにSplitした後のものを代入してるとか
0906デフォルトの名無しさん
垢版 |
2019/07/06(土) 12:30:25.64ID:z73aGQye
>>905
返信遅れて大変申し訳ありません
3つのご指摘直して反映できました。
ありがとうございました。
0907デフォルトの名無しさん
垢版 |
2019/07/25(木) 16:22:05.73ID:eKMV/4VB
ExcelVBAのユーザーフォーム上で、PDFを表示、操作をしたいです。
ですが、ユーザーフォームにコントロールを追加しようとすると、
「要素が見つかりません」とダイアログが表示され出来ません。
どなたか解決策をご存じの方がいましたら、教えていただけますでしょうか。。

Acrobat pro DCはインストールしてあり、ExcelはOffice365を最新の状態で使用してます。
0910デフォルトの名無しさん
垢版 |
2019/08/14(水) 15:00:22.98ID:Jc+eFMLQ
ここで質問していいかわからないんですが、違ったら誘導していただけると助かります。

メッセージボックスを最前面にするために以下のコードを利用したいのですが、呼び出し元の下から3行目のvbOKOnly を vbYesNo に替えた後、選択ボタンを取得する方法がわかりません。
どのようなコードを足したらいいかご教示いただけないでしょうか。

【呼び出し元】
Option Explicit
Dim WSHObj
Dim Args
Set WSHobj = WScript.CreateObject("WScript.Shell")
Args = "cscript ""C:\Program Files\PPX\script\WSHPopUP.vbs""" _
& " ""出力メッセージ""" _
& " 0" _
& " ""VBS名称""" _
& " " & vbOKOnly ←vbYesNoに替える
WSHObj.Run Args,0,true
Set WSHobj = Nothing

【WSHPopUP.vbs】
Option Explicit
Dim Arg
Dim WSHObj
Set WSHobj = WScript.CreateObject("WScript.Shell")
Set Arg = WScript.Arguments
WSHObj.Popup Arg(0),Arg(1),Arg(2),Arg(3)
Set WSHobj = Nothing

よろしくお願いします。
0911デフォルトの名無しさん
垢版 |
2019/08/14(水) 19:26:49.04ID:uFuQVnLY
【呼び出し元】
Option Explicit
Dim WSHObj
Dim Args
Set WSHobj = WScript.CreateObject("WScript.Shell")
Args = "cscript ""C:\Program Files\PPX\script\WSHPopUP.vbs""" _
& " ""出力メッセージ""" _
& " 0" _
& " ""VBS名称""" _
& " " & vbYesNo
Dim hoge '受け取り用に追加
hoge = WSHObj.Run(Args,0,true) 'この変数hogeにvbYes=6かvbNo=7が入る。
'何か処理を書く
Set WSHobj = Nothing

【WSHPopUP.vbs】
Option Explicit
Dim Arg
Dim WSHObj
Set WSHobj = WScript.CreateObject("WScript.Shell")
Set Arg = WScript.Arguments
Dim fuga '戻り値用に追加
fuga = WSHObj.Popup Arg(0),Arg(1),Arg(2),Arg(3) 'popupの戻り値を取得
WSHObj.Quit fuga '呼び出し元に終了コードとして返す
Set WSHobj = Nothing
0912デフォルトの名無しさん
垢版 |
2019/08/14(水) 19:27:35.96ID:uFuQVnLY
他にExecを使う方法もある
0915デフォルトの名無しさん
垢版 |
2019/08/16(金) 11:35:25.09ID:vco+QnrA
>>911
>910,>914です。
教えていただいたコードを試してみたのですが、
‘何か処理を書く
のところに
MsgBox hoge
と入れたのですが、「はい」「いいえ」どちらの場合も 0 が返されます。
どうしたらいいでしょうか
0918デフォルトの名無しさん
垢版 |
2019/08/16(金) 14:13:30.60ID:WTD6eyC3
>>915
【WSHPopUP.vbs】 のWSHObj.Quit fuga は間違い。エラー出してる。
Wscript.Quit fuga が正しい
0919デフォルトの名無しさん
垢版 |
2019/08/19(月) 10:24:33.34ID:ELmh1Bgt
>>918
返信遅くなってすみません。

レスの通りに修正し、
さらに
fuga = WSHObj.Popup Arg(0),Arg(1),Arg(2),Arg(3) 'popupの戻り値を取得

fuga = WSHObj.Popup(Arg(0),Arg(1),Arg(2),Arg(3)) 'popupの戻り値を取得
に変更し、成功しました。

たいへん助かりました。
ありがとうございました。
0920デフォルトの名無しさん
垢版 |
2019/09/25(水) 10:50:56.65ID:L8CrQHgr
WordのアクティブXコントロールのテキストボックスなのですが
BackStyleを0設定すると背景色は消えるのですが
デザインモードを解除すると背景色が出てしまいます

これはバグでしょうか
0925デフォルトの名無しさん
垢版 |
2019/11/21(木) 09:09:00.43ID:IRESAa/B
Exchange / Outtlook VBAの質問です
初歩的な質問で申し訳ありませんが、お知恵を拝借できないでしょうか

任意の名前を持つ配布リストや連絡先グループに属するExchangeユーザーのSMTPアドレスの一覧を取得するにはどうしたら良いのでしょうか

配布リストや連絡先グループをExchange ユーザーとして取得するところまでは出来ているのですが、そこから先がうまくいきません

なお配布リスト、連絡先グループいずれも個人ユーザーのみが登録されている前提なので、再帰によるメンバー取得は不要な状況です
0926デフォルトの名無しさん
垢版 |
2019/12/31(火) 13:22:12.18ID:CEriAQ2K
エスパー的にはexchangeユーザーのユーザー一覧と配布リストのユーザーの
名前を比較すればいいんじゃね
0932デフォルトの名無しさん
垢版 |
2020/06/27(土) 08:55:28.74ID:9qJBLgyD
Aex
0935デフォルトの名無しさん
垢版 |
2020/07/11(土) 22:25:50.10ID:R8+8lu0C
頼むからVBAでWin32 APIを呼び出すのはやめてくれ
そこまで要求するなら包括的な自作DLLを作ればよいと
0940デフォルトの名無しさん
垢版 |
2020/07/12(日) 14:43:36.83ID:HEMY1mlG
Win32API使える奴がDeclare文読むの?
そりゃ、間違ってるとかおかしなのも中にゃあるけど、普通そんなとこ見ないだろ。
0941デフォルトの名無しさん
垢版 |
2020/07/14(火) 21:09:03.79ID:66utiKuE
質問スレにも書き込んだのですが二つのieを起動して2つ目のieでpdfを開いて名前をつけて保存したいのですがexecwbを行うと一つ目のieのhtmlが選択されてしまいます。どうかやり方を教えてください。よろしくお願いします。getIEはシェル取得ファンクションです。

Set ie = CreateObject("InternetExplorer.Application")
ie.Visible = True
ie.navigate "http://yahoo.jp

Dim ie2 As InternetExplorer

Set ie2 = CreateObject("InternetExplorer.Application")


ie2.Visible = True

ie2.Navigate2 "C:\\Desktop\test.pdf", 1



Set ie2 = getIE("test")

Dim test As String


test = "c:\test\test.pdf"


ie2.ExecWB OLECMDID_SAVEAS, OLECMDEXECOPT_DONTPROMPTUSER, test

End Sub
0942デフォルトの名無しさん
垢版 |
2020/07/14(火) 21:45:01.80ID:euO1Ygvg
初心者です。どうかお力添えをよろしくお願いします。
0943デフォルトの名無しさん
垢版 |
2020/07/14(火) 22:53:58.63ID:euO1Ygvg
すいません 自己解決しました。単純なスペルミスでした
0944デフォルトの名無しさん
垢版 |
2020/08/03(月) 07:54:11.09ID:4AChPi7X
製品番号のフォルダ検索して中のPDFファイルを開くようなマクロ書いてるんだけど
先日Officeのアップデートしたら、件のマクロがしばらく応答なしになって
悪意のあるマクロ云々とか言われてExcel強制終了になった

それ以後そのマクロは激遅に
ブックのファイル名変えたりマクロの関数名変えたりするとしばらくは元の速度に戻るが
1日位経つとまた遅くなる

調べてみたら、VBScript.RegExpのExecuteメソッドが10秒位かかるようになってる
通常は30msで終わるような代物がだ

どうもShellやRunで一度に多数のPDFファイルを開いているのがお気に召さなかったらしく
ファイル名や関数名でアンチウィルスのブラックリストに載る?
そのあとはそれっぽい名前のメソッドが標的になり遅くなるような感じ

こういうの経験した人いる?
0946デフォルトの名無しさん
垢版 |
2020/08/04(火) 17:10:57.70ID:FjnHeWDC
会社のPCじゃなければそれもありだが…

paloalto trapsとかいう奴
毎回反応する訳じゃないのが嫌だし
編集中のデータも問答無用でごっそり強制終了しやがるふざけんな
0948デフォルトの名無しさん
垢版 |
2020/08/05(水) 09:06:26.86ID:FS19WAoY
>VBScript.RegExpのExecuteが10秒

>ShellやRunで一度に多数のPDFファイルを開いている
の関連がわからんね

この二つは分けて原因を探るべきじゃ?
0949デフォルトの名無しさん
垢版 |
2020/08/05(水) 09:37:11.18ID:FS19WAoY
マクロ付ファイルでPDF開かせるてのは相当に怪しいと捉えられる可能性は高いね
セキュリティ変更や除外設定なんてのは出来ればしたくないだろうし引っかからないような対策があればいいがな

ShellやRunでPDF開くんじゃなくExcelもしくはWordに取り込ませるようにすると引っ掛からないかもという気がしなくもない
0950デフォルトの名無しさん
垢版 |
2020/08/06(木) 06:47:20.91ID:SEE4FkRy
VBAから直接PDFを開くんではなく
バッチファイルを書き出し実行することで反応の確率は減ったが
アンチウイルスが反応しやすい型番とかあってよくわからん

正規表現のexecuteメソッドは「それっぽい」名前のメソッドだろ?
これがアンチウイルスが反応したときに動作してた関数から呼ばれた時だけ遅くなるんだよ
同じブック中の他の関数から呼ばれた時は高速のままだ

dir関数でフォルダ内部のファイル名取得して正規表現検索してる時だけアホみたいに遅くなる時がある
0951デフォルトの名無しさん
垢版 |
2020/09/01(火) 22:25:39.71ID:zpaWCruh
VBA開発を頼まれた いくら位金額を提示したら良いか誰か教えてほしい

内容は不動在庫を15店舗くらいあグループ店の売り上げデータから引取先の候補を検索するシステム
商品のバーコードから行き先候補を検索する予定。


この内容ってアウトソーシングするといくら位?
0954デフォルトの名無しさん
垢版 |
2020/09/02(水) 07:41:48.93ID:9bMNhGbM
>>951
マジレスするとVBAは安いので1人月50ぐらいかな。

内容の詳細が分からないが、大して難しいとは思えないので。

どんなに簡単でも50以下は有り得ない。
0956デフォルトの名無しさん
垢版 |
2020/09/04(金) 13:35:21.25ID:YrY1uJ8P
皆さま回答ありがとうございました!
0957デフォルトの名無しさん
垢版 |
2020/09/05(土) 14:34:31.84ID:NQbTfPgu
>>944
遅レスだけど

速度が遅い件は経験ありますよ
うちの環境で調べたらSYMANTECのエンドポイントは大丈夫で、MSのディフェンダーだと遅かった
Win10のバージョンも影響したかもしれないけど、現行サポート対象バージョンは、ディフェンダーだとすべて遅い
会社のPCなんでActiveDirectory、SYMANTEC、SKYSEAがスタンダードなんだけど、更新時の不具合があったんで一部のPCでディフェンダーを使ってて発覚した
VBSの内容は、多少分岐やループはあるけど正規表現を使って置換するだけの簡単なものだった
0958デフォルトの名無しさん
垢版 |
2020/09/09(水) 22:08:05.33ID:kLG5WjnA
ミッションクリティカルな仕事をVBAでやってるのに、
少し前から動かなくなって修正したくても前任者がこの世に不在+仕様書やマニュアル無し+社内プログラム分かる人いない
って状況割とよく聞くけど、まあ自分が担当することになったんだけど、これどーすりゃいいの?

何社かソフトウェア開発系の会社に話聞きにいったら、vbaはちょっと・・・とか、プログラムみてこれはちょっと・・・って反応だし
1千万超える金積むとなると役員に説明しなくちゃならないんだけど、なんでおまえがやらないの?みたいな反応だし
まあ、控えめに言ってこのまま止まり続けると会社潰れるから言い値で出すしか無いんだろうけど
こういう状況、ここに巣喰う人達はどうやって乗り越えたのかアドバイスやヒントください

転職、以外で
0960デフォルトの名無しさん
垢版 |
2020/09/09(水) 22:58:18.76ID:sZuFJhML
>>958
素人が作っためちゃくちゃなコードのデバッグや修正は仕事でもやってるからあんまり困ったことない
言語も問わず引き受けてる
0961デフォルトの名無しさん
垢版 |
2020/09/09(水) 23:15:38.01ID:kLG5WjnA
>>960
すげえ
社内システム作ってるところとかつてで色んなところに聞きいったけど数百万じゃ難しいって言われたんだ
分かる人には難しさっていうか、見積もりがわかるもんなんだな
参考までにどういうところを見て判断するもんなの?
偉い人に説明するときの参考にしたい
0962デフォルトの名無しさん
垢版 |
2020/09/10(木) 01:17:25.37ID:Uj/ZEArt
>>961
変数名、インデント、コメントの入り方なんかを見れば、制作者のレベルがだいたいわかる
その上でソースの行数、モジュール数がどれぐらいか
0963デフォルトの名無しさん
垢版 |
2020/09/10(木) 01:28:39.24ID:R4ATSmnt
マクロの記録をベースにしてるのは危険な感じがする
あとループの中にgotoが入ってるやつ見たときはちょっと感動した
0966デフォルトの名無しさん
垢版 |
2020/09/10(木) 12:15:12.05ID:dws80o57
住宅で喩えるなら  地場でイチから設計・施工をする在来工法のパワービルダーや
社内で設計した通り加工し現地で組み立てるだけのハウスメーカー 又は方式は
一緒だけどコスト削減に特化して現地の安い下請け使って費用を抑えるローコスト系

システムを売りにしてる企業は上で言うHMに近く、依頼すればひと声一千万は相場
PBはどんどん規模が縮小してるから探すのも大変 LCHMなら見付かるかも知らんが
要求に応じかねるレベルだと思われる

当時の社内の人間が内製したレベルならその条件、例えばExcelVBAと絞って
改修・修繕の可不可(得意かどうか)を先ず相手に問えば話が早いかも知れない
業務内容を伝えるだけだとうまく伝わらずに高額商品を売る方向に話が進み兼ねない
0967958
垢版 |
2020/09/10(木) 12:19:21.40ID:Oh+8RCfx
>>962
はえ〜・・・なるほどなぁ
変数名は一応業界の人なら意味が分かる程度
インデントはルールから逸脱してるのはほぼない、とおもう
コメントはあることはあるけど助けられたコメントはほぼないな
'ここで●×処理をする Sub ●×処理(・・・・・・・) みたいなw
行数はただの改行も含めると3万行くらいで
モジュールが4、functionが500、subが1500くらい

この辺が大量にあるから難しいって説明しようとしてたんだけど
数行(ステップ?)なら別にF8ポチポチしながら追えるんだよね
じゃあ足りないのは根気だろ、みたいに言われて循環複雑なんちゃらみたいなの調べてたけど
結局こんな数字だしても理解されないだろうしなぁってのと、単に俺が素人だからってのもあって今に至る

>>964
マジそれなんだけど、何をしてるのか誰もわかんないから何を作ってもらえば良いのかも説明出来ないっていうねw
世間で言われてる炎上案件よりよっぽどかわいいレベルなのかも知れないけど
マジであと数ヶ月放置して会社潰れればいいんじゃねーかとも思ってる
0968958
垢版 |
2020/09/10(木) 12:20:28.24ID:Oh+8RCfx
>>966
おっと、同じ人かもしれんけどありがとなあ
0969デフォルトの名無しさん
垢版 |
2020/09/10(木) 12:36:48.47ID:l+lun8zf
>>961
わかんねーから高めに見積もってんだよ
0970デフォルトの名無しさん
垢版 |
2020/09/10(木) 13:19:24.92ID:4mlwjCSe
>>967
他人の作ったプロシージャを2千個3万行解析してドキュメントを作成しながらデバッグなら1千万はまあまあ妥当かと
設備投資でたった1千万が出せない会社は遠からず潰れると思うよ
ほかの資産や設備だって千万単位の修理はいつ発生してもおかしくないし
0971デフォルトの名無しさん
垢版 |
2020/09/10(木) 22:45:47.73ID:Oh+8RCfx
>>970
詳しい人にそう言ってもらえるとたすかる
とりあえず素人がやるもんじゃ無いって話は集めたので素直に金だせやって資料作ってるw
しかし1千万つめばできちゃうってのもすげーなあ
個人にとっては大金だけど、会社にとっては中堅社員一人分/年くらいの費用だもんな
0972デフォルトの名無しさん
垢版 |
2020/09/11(金) 11:34:11.36ID:LThuGd0x
解析・デバッグ・ドキュメント作成でひと声一千万?
じゃ、せっかく解析できたんだしそれをベースに新システム製作費は?
パッケージから大きく外れるものだったらオリジナル新規作成?千万? 都合?千万?

せっかく途中まで分析し始めたようだし「わたしに二千万ください、これやります」でいーじゃん
0974デフォルトの名無しさん
垢版 |
2020/09/13(日) 14:01:55.06ID:AJy8UwEC
>>972
やり方教えてくれww
まあ1千万超えは最低限な感じだね
今起きてる障害を直すだけだけどね
0975デフォルトの名無しさん
垢版 |
2020/09/13(日) 18:15:28.87ID:/EQXGeQJ
業務止まってるのにのん気だな
せめて地方と業務とアプリぐらい概略書けば誰かがどこかを紹介するかも知れんぞ
アプリはAccessと踏んだが、どう?
どうせこのご時世、近場でなくともZoomやらでリモートしたりでのサポートだろうし
0976デフォルトの名無しさん
垢版 |
2020/09/16(水) 23:50:50.45ID:249cxrEP
結局余所に投げる方向で解決した
乗り越えられるものとそうじゃないものを見極めるのも大切と思い込むことにした
なお費用は想定の2倍近くになる模様w
みんなアドバイスありがとう
0977デフォルトの名無しさん
垢版 |
2020/12/20(日) 00:10:44.84ID:14Mj/Q6q
>>963
> ループの中にgotoが入ってるやつ見たときはちょっと感動した

Continue 文が無いメジャーな言語があってな。
GoTo Continue1
とか、書くときの隔靴掻痒感と言ったらもう・・・。
0980デフォルトの名無しさん
垢版 |
2021/05/14(金) 13:33:45.79ID:Kf/7Ycdt
WordのVBAで質問させてください。
文書内の2種類の括弧「」『』の中にある改行だけを削除するマクロを作りたいと思っています。

例えば以下のような文章に対してマクロをかけたときに
「み

ん」





「り




以下のような結果になるマクロです。
「みかん」





「りんご」

つづきます
0981デフォルトの名無しさん
垢版 |
2021/05/14(金) 13:34:48.74ID:Kf/7Ycdt
Sub 括弧内の改行を削除()
Dim myRange As Range
Set myRange = ActiveDocument.Range(0, 0)
With myRange.Find
.Text = "[「『""]*^13*[""』」]"
.Forward = True
.Wrap = wdFindStop
.MatchWildcards = True
Do While .Execute = True
With myRange.Find
.Text = "^13"
.Replacement.Text = ""
.Forward = True
.Wrap = wdFindStop
.Format = False
.MatchCase = False
.MatchWholeWord = False
.MatchByte = False
.MatchAllWordForms = False
.MatchSoundsLike = False
.MatchFuzzy = False
.MatchWildcards = True
.Execute Replace:=wdReplaceAll
DoEvents
End With
Loop
End With

Set myRange = Nothing
End Sub
0982デフォルトの名無しさん
垢版 |
2021/05/14(金) 13:35:33.64ID:Kf/7Ycdt
自分なりに以上のようなマクロを組んでみたのですが、実行してみると、
最初の「みかん」の改行は削除されるのですが、そのあとの「りんご」の改行が削除されません
やり方をお教えいただけると助かります。
0985デフォルトの名無しさん
垢版 |
2021/05/14(金) 20:22:39.22ID:pWuJPMFY
RegExpオブジェクトを使えば。
面倒だから俺はどうしてもというとき以外は使わない。
0986デフォルトの名無しさん
垢版 |
2021/05/14(金) 20:24:37.07ID:6X3W89ka
Wordなら最初から正規表現もどきが使えるから、Excel VBAよりはちょっとだけ楽に文字列操作ができる
0987デフォルトの名無しさん
垢版 |
2021/05/15(土) 04:20:48.68ID:rI+eK0KL
>>982
正規表現でマルチラインを設定して改行を空文字に置換
RegExpオブジェクトの使い方は、他の言語より面倒な書き方だったりするけど文字を操作するなら必須だと思うよ
0988デフォルトの名無しさん
垢版 |
2021/06/10(木) 19:25:30.25ID:CLREf/YK
splitでいい感じに分割して判定してreplaceで改行無くしてくっ付けろ
「」は自分でつけたせ
0989デフォルトの名無しさん
垢版 |
2021/08/25(水) 17:06:39.36ID:qYcBJ8fd
あんま実験してないから文句いうなよ
まずはさ、アホでも考えられるような地道な形でやるべきだと思うわ
そのあとに、効率性とか考えて無駄排除したりすればいいわ

Sub MainProcess()
Dim text As String
text = Sheet1.Cells(1, 1) 'A1に括弧が含まれる文字列をいれろ

Const right1 As String = "「"
Const left1 As String = "」"
Const right2 As String = "『"
Const left2 As String = "』"

text = MakeText(text, right1, left1)
text = MakeText(text, right2, left2)

'B1に結果が返ってくるぞ。途中結果はメッセージボックスで順次表示されるからループ終わるまで何度もOKおせ
Sheet1.Cells(1, 2) = text
End Sub
0990デフォルトの名無しさん
垢版 |
2021/08/25(水) 17:06:59.82ID:qYcBJ8fd
>>989の続き 
Function MakeText(text As String, rightChar As String, leftChar As String) As String
Dim startPosition As Integer
Dim endPosition As Integer

Dim InstrStartPosition As Integer
InstrStartPosition = 1

Do While InStr(InstrStartPosition, text, rightChar) <> 0
startPosition = InStr(InstrStartPosition, text, rightChar)

If startPosition <> 0 Then
endPosition = InStr(startPosition + 1, text, leftChar)
End If

Dim midText As String
midText = Mid(text, startPosition, endPosition - startPosition + 1)
Dim midTextChanged As String
midTextChanged = Replace(midText, vbLf, "")

text = Replace(text, midText, midTextChanged)

InstrStartPosition = startPosition + Len(midTextChanged)

MsgBox "無限ループになっちゃった時はctrl + Breakを押せ" & vbCrLf & vbCrLf & text
Loop
MakeText = text
End Function
0992デフォルトの名無しさん
垢版 |
2021/08/25(水) 17:18:37.37ID:qYcBJ8fd
あれだ、最期の方に「だけが単独であると無限ループだわな
ループの条件にその辺の修正いれておいてくれ

もう寝る
0993デフォルトの名無しさん
垢版 |
2021/08/25(水) 17:34:31.79ID:qYcBJ8fd
おっきした
>>990を↓に修正
Function MakeText(text As String, rightChar As String, leftChar As String) As String
Dim startPosition As Integer
Dim endPosition As Integer
Dim InstrStartPosition As Integer
InstrStartPosition = 1
Do While InStr(InstrStartPosition, text, rightChar) <> 0
startPosition = InStr(InstrStartPosition, text, rightChar)
If startPosition <> 0 Then
endPosition = InStr(startPosition + 1, text, leftChar)
End If
Dim midText As String
midText = Mid(text, startPosition, endPosition - startPosition + 1)
Dim midTextChanged As String
midTextChanged = Replace(midText, vbLf, "")
text = Replace(text, midText, midTextChanged)

InstrStartPosition = startPosition + Len(midTextChanged)
MsgBox "無限ループになっちゃった時はctrl + Breakを押せ" & vbCrLf & vbCrLf & text

Dim textForCheck As String
If textForCheck = text Then
MakeText = text
Exit Function
End If
textForCheck = text

Loop
MakeText = text
End Function
1000小倉優子 ◆YUKOH0W58Q
垢版 |
2021/09/01(水) 00:17:27.14ID:7BIbcRgh
  ∧,,,∧ 
 (  ・∀・) 1000ならジュースでも飲むか
  (    ) 
  し─J 
10011001
垢版 |
Over 1000Thread
このスレッドは1000を超えました。
新しいスレッドを立ててください。
life time: 2294日 13時間 24分 43秒
10021002
垢版 |
Over 1000Thread
5ちゃんねるの運営はプレミアム会員の皆さまに支えられています。
運営にご協力お願いいたします。


───────────────────
《プレミアム会員の主な特典》
★ 5ちゃんねる専用ブラウザからの広告除去
★ 5ちゃんねるの過去ログを取得
★ 書き込み規制の緩和
───────────────────

会員登録には個人情報は一切必要ありません。
月300円から匿名でご購入いただけます。

▼ プレミアム会員登録はこちら ▼
https://premium.5ch.net/

▼ 浪人ログインはこちら ▼
https://login.5ch.net/login.php
レス数が1000を超えています。これ以上書き込みはできません。

ニューススポーツなんでも実況