◎正当な理由による書き込みの削除について: 生島英之 とみられる方へ:VBAなんでも質問スレ Part2 [転載禁止]©2ch.net YouTube動画>1本 ニコニコ動画>1本 ->画像>12枚
動画、画像抽出 ||
この掲示板へ
類似スレ
掲示板一覧 人気スレ 動画人気順
このスレへの固定リンク: http://5chb.net/r/tech/1432173164/ ヒント: 5chスレのurlに http ://xxxx.5chb .net/xxxx のようにb を入れるだけでここでスレ保存、閲覧できます。
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/ バカはレスしないでくれる? 個人の主張として批判せず、いたずらにある類として扱うのは極めて恣意的かおバカの批判にあらざる攻撃の特徴。 まあ、その軽蔑すべき発想で返した俺も反省はしてもよいが はっきり言って精神病とバカの特徴でしかない論法でレスするなよ。 俺はバカと精神病きらいだからな。 おまえら、マジで精神病と思われる宣言的絶対主義の形而上学バカの一味は人類の公的な敵だとおもっているからな。 さしあたりお前らが馬鹿にされていることは科学的認識の健全性をそれなりに示すから喜ばしいがな。 それにしても、単なる知識を披露しあっているだけの時は頭良さそうなふりはできるが、 いよいよ自身の認識を問われる事態になるとここにいる連中、そこの浅さを露呈するやつ多すぎ 所詮、2chだな
>>3 むしろ自分が歯が立たない相手だと分かったら「精神病と馬鹿」というレッテルを相手に貼って
逃げるお前の方がヘタレだけどな
精神病で馬鹿なのはお前の方だよ
どこかわからんのでココで。 WordVBAで質問です。 あらかじめスタイルを本文内に設定しておき、 マクロで指定したスタイルが設定されている箇所を検索→ そのスタイルが指定されている場所の文章の置き換え ということがしたいですが可能でしょうか。 スタイル名を指定して本文内を検索する、という例が見つからず困っております。
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
>>7 受信したメールを置換ってできないのでは?
置換したファイルをエクスポートするのですか?
すみません、受信メールではなく、作成中のメールです。 PCからガラケーに送ると、Enter改行だと無視されてしまうので、送る前にボタンを押してShiftEnter改行に変えたいのです。 リンク付きでPCの人にも送るので、HTMLメールのまま送りたいので。
>>10 リボンの編集→置換で(ワイルドカードを使用する)^13と^11を指定すればウィンドウからはできましたが、
この機能に該当するメソッドがどうにも探せないですね。
参考にされたコードはワードのものなんですけど、OUTLOOKで使うにはちょっと無理そうです。
初心者から始め、2年ほど1人でVBA業務をしていたのですが そろそろ引き継ぎ等も考え、コーディング規約のようなものを作成しようと考えています。 各プログラムで命名規則も違うため、統一したいのですが今ひとつ可読性の高い命名というのがわかりません。 修正前の変数宣言のコードを記載しますので、ぜひ添削していただけないでしょうか。 なお、グローバル変数宣言しているのは当時、この方法が一番良いと思ったためです。
'ワークシート名宣言 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" '変動税率
>>13 工事をConと省略せずにconstruction_xxxと書くべきだと思うが、それよりもワークシートのセル番地を固定文字列で定義するのはまずいだろう。
一行ずらしましょう、とかするときどうするの?不自由この上ない。
>>14 セル番地の固定文字列については改めて見るとすごくおかしいと思いました。
修正したいですが、皆さんワークシートやセル番地の定数はどのようにされているのでしょうか。
検索はするものの、なかなか見つけられず困っています。
>>15 気づきませんでした、すみませんありがとうございます。
セル番地はセルに名前を付ける 列番号はenumにまとめる シート名はconst 基本適当
一日20項目ほどの数値データが入力されている月報の表を 月末にデータを全て消去して、同じWS上で次月の日付、曜日 の書き込まれた新しいフォームに更新したいのですが、 マクロで実現可能でしょうか?
やってみたけど30日までの月や31までの月などがあって 上手く行かないのです。
翌日の日付が「1」だったらコードを実行するようにしたらいいんでない?
>>18 年と月が指定されればその月の日数は求められるよ
(月だけだとうるう年があるから2月に対応出来ない)
具体的やり方は複数あるだろうけど
例えばDateserial関数で指定月の翌月のゼロ日(ツイタチの前日)を求めれば出る
2015年7月の日数を求めたらこんな感じ
Sub Test()
Dim 年指定 As Long
Dim 月指定 As Long
Dim 日数 As Long
年指定 = 2015
月指定 = 7
日数 = Day(DateSerial(年指定, 月指定 + 1, 0))
End Sub
>>18 フォーム更新のタイミングは?
ファイルを開いたときに自動で更新するの?
年月は、ボックスからプルダウンリストで指定 するだけです。ただ、指定年月の1〜月末までの日付、曜日を月報の1.2行目に縦に列記するコードが出来ないのです。
>>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
>>14 なんやわからん英語で書かれている方がよっぽど分かりずらいので、
あくまでもEXCELマクロで使用するスクリプトなのでコメントに書いている
そのコードを外人に見せるなら英語が望ましいけど、
漢字をそのまま使えばいいかと。
工事名称等は重複してるので、設定_工事名称とかになるんでしょうかねー。
セル番地の固定値を変数で持っているのが引っかかっているみたいですけど、
メンテするときはコードのメンテも込みになるでしょうから、
変数に代入して整理してるし良いのでは?
というか、そういう風にルールを敷けばいいとおもうの。
>>28 全体を一行下にずらす、とかするとき数十個ある変数を個々にメンテするの?
工事_A = "AO1" → 工事_A = "AO2"
工事_B = "AP1" → 工事_B = "AP2"
・・・
>>29 それでいいと思うよ
どうやろうとしてるのか知らんけど、この手の奴は分かりやすいのが一番だと思う
分りやすいっていうか、直接的だから理解はしやすいけど 修正が面倒で間違いも起きやすいね レイアウト自体の変更ではなく、全体を一気に動かすなら 最初の一要素だけ絶対アドレスで指定して あとはそこからの相対参照(要するにオフセット)にしておくというのもひとつの手だと思う それなら1個いじれば全部まとめて直せる
>>31 数十行にわたるコードのメンテぐらいで不満がある程度なら、
プログラム書くのは向いていないので、長いコードは書かないほうがいいと思う。
あと、ただ一つ変えれば全部まとめて直せるコードでも、
そのコードを知らない他人から見れば、結局全部見ることになると思うよ。
本当にそれでいいのかという部分も含めてテストすることになるから。
で、結局のところ別にどっちでもいいとなる。
>>31 項目増えて、途中に一行追加されたら似たようなことになるでしょ
>>32 数十行だろうと数万行だろうと
ひとつの変更で複数の変更箇所が出てくる構造自体のほうが問題だと思うよ
>そのコードを知らない他人から見れば、結局全部見ることになる
云々はベタに一個ずつ指定していても同じ確認コストを要するわけで
適切なコメントをつけとくなりなんなりで対応しないとしょうがないんじゃないの?
>>33 いや、だから
>レイアウト自体の変更ではなく、全体を一気に動かすなら
という前提条件をつけた上での話をしてるんだけど
>>35 > という前提条件をつけた上での話をしてるんだけど
そう言うケースがどれだけあるんだ?
って話でしょ
滅多にないケースに対応するために分かりにくい方法をとる必要はないよね
>>36 表の頭にあとから表題を付け加えるとかで
全体を動かすケースってのはそれなりにあると思うよ、
仕様変更で項目順の変更とか途中に項目追加とかのほうが多いだろうけど。
それに、全体をずらすってのは
>>29 の発案であって俺が言い出した話じゃないんで
俺はあくまで他人から与えられた前提条件で考えただけの話
>>37 > 仕様変更で項目順の変更とか途中に項目追加とかのほうが多いだろうけど。
普通はそうでしょ?
> 俺はあくまで他人から与えられた前提条件で考えただけの話
あまりない条件だけ考えることになんか意味があるのか?
>>38 そっちのが多いとは言ったが、全体を動かすのもそれなりにあるって言ってるじゃん
滅多にないとかありえないとかいうほどのレアケースではないよ
>>39 > ありえないとかいう
誰もそんなことは言ってないだろ?
お前さんも認めてるように
> 仕様変更で項目順の変更とか途中に項目追加とかのほうが多い
なら、そっちの対応を優先して設計した方がいいんじゃね?
って話
>>37 別にセルのアドレスを固定で持ってようが、一つのアドレスに対して
相対で持ってようがどっちでもいいだろ
ケースバイケースで使い分けようとは思わないのか?
俺が言ったのは数十個(行)程度の修正から避けるために
相対座標で組んだ方が良いと思っているならプログラム組むのは
向いてないってことだよ
だから、お前は長いソースを組むような仕事は向いてないよって言ったんだよ。
せいぜい短く済むようなのを探しとけw
分かりやすいソースのほうが、修正工程の見積もりだって立てやすい
お前のいう相対座標は、その一つの絶対座標に対して成り立っているんだから
見出しが追加されてずれる程度ならいいが、途中の箇所に複数追加変更されたら
むしろ修正面倒なんじゃね?
数万も入力させるセルがあるなんてシートの設計のがおかしいと思うが
数万のセルがあちらこちら変更になるのなら簡単で見やすい定義を切っている
ほうが引き継ぎもしやすいし、修正もしやすいってわからんのか?
>>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)
・・・
になる程度の話でしょ?
んでもって、何もわからない誰かに保守を引き継ぐのであれば表のレイアウトについてはコメントに書いておくべき物じゃないですかね?
後任の人があらかじめ何の予備知識もないなら全部の要素を直接指定しているのかそうでないか自体、
少なくともコードを全部読まなきゃ判断できないわけで、それなら相対指定で書いてもおなじことです。
やべ、工事_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) ・・・
さらに間違ってた 工事_AがRange型ならそれ以降にRange(工事_A)なんて書く必要なかった まぁ、何も知らずにコードを読んで表のレイアウトを理解できるかどうかとか 表の変更にかかるコストとかには大して影響ない話だけど
>>42 > どっちにせよレアケースではない
いや、レアケースかどうかじゃなくて
> 仕様変更で項目順の変更とか途中に項目追加とか
と比較しての話なんだが...
ひょっとして論理的な思考ができない人なの?
> 少なくともコードを全部読まなきゃ判断できないわけで、それなら相対指定で書いてもおなじことです。
セルアドレスなら一目でどこを指してるのかわかるけど、Offset( ) だとちょっと面倒でしょ?
そもそも、自分で間違えてるようじゃ説得力 0 だしね w
>>45 とにかく、コストがさほど変わらん以上、そういうことは重要ではないよね、
って言ってるんだけどそれが論理的に理解できない人なの?
んで、Offsetで(R1C1形式で)書くのがいやなら
RangeでA1形式で書けばいいじゃん
そんなの瑣末なことでしょ
あと、間違えたのは夜中にトイレで起きたときに書き込んだからで
たぶんあのときだとどっちで書いても間違えてる
(普段からR1C1形式で書くのでどっちかってーと俺はA1形式のほうが間違える)
相対座標がどうたらというのは
>>31 が言い出したことにすぎないし、"AY0"とかいう文字列で指定すること自体がけしからんという意見。
>>46 > とにかく、コストがさほど変わらん以上、そういうことは重要ではないよね
どう書いてもたいして変わらんから、ごちゃごちゃ言い出した
>>29 とか
>>31 がバカと言う主張なら納得
> RangeでA1形式で書けばいいじゃん
そう言う問題じゃない
Range("E3").Range("G4")
ってどこ?
ってすぐわからんでしょって話
まあ君にとってはどうでもいい話だったな w
>>48 全体を動かす際のコストは明らかに相対参照のほうが上で、
レイアウト変更ならどっちもどっち、って話だよ。
俺個人としては表の各要素の絶対座標よりも表のレイアウト内での相対位置のほうが
重要だと思うんで可読性は相対表記のほうが上だと思う。
もちろん、range("E3").Range("G4")とは書かないよ
だからこそのOffset表記なんであって
仮に書くなら
工事_A = Range("G4")
工事_B = 工事_A.Offset(0,1)
みたいに書けば表の中での位置関係が分りやすい(、と思うってだけなんだけどね)
んでさ、一々相手の人格攻撃するのは止さないか?
反論するのは難しくないけどめんどくさいし
貴方にとっても内容を論理的に言うこと以外に自説の説得力を増す手法なんてないよ
>>49 > レイアウト変更ならどっちもどっち、って話だよ。
そんな思い込みを前提にされてもなぁ...
> 重要だと思うんで可読性は相対表記のほうが上だと思う。
> だからこそのOffset表記なんであって
応用力ないの?
> Range("E3").Range("G4")
> ってどこ?
って書いてあるんだから、レスする前に
Range("E3").Offset(3,6)
と
Range("K6")
のどっちが可読性が高いかとか考えないのか?
> めんどくさいし
君にはレスしないと言う自由があるよ
反論するのも苦労してるみたいだしね w
>>50 >どっちが可読性が高いかとか考えないのか?
うん、だからOffsetのほうが読みやすいよ
>レスしないという自由
は確かにあるし
君にも好き勝手な方言を垂れ流す手段(自由や権利ではない)はあるんだけど、
こうやってきちんと反論しといたほうが良さそうなんで仕方ないからそうしてる
>>51 > うん、だからOffsetのほうが読みやすいよ
へー、そうなんだー、すごいねー(棒
基準の位置と Offset の値の二個読まないといけないだけでも直書きより不利なのに、読みやすいとか笑えるわ w
あと方言とか意味不明
もう少し自分の書き込み見直した方がいいんじゃね?
>>53 絶対アドレスが必要ならそうだけど
通常は表内部のレイアウトが問題なんだから
絶対アドレスは気にする必要ないよね?
それともいちいち「何々の項目はF5だ」とか気にして作業してるの?
俺は「表の1列目は@@@の項目で、2列目は***の項目だ」みたいな捉え方はするけど
絶対アドレスが必要になったことなんてないよ
変換ミスについてはまぁ申し訳ない、だけどそれは議論の結果には影響ないと思う。
>>54 > それともいちいち「何々の項目はF5だ」とか気にして作業してるの?
いちいちそんなことをしたくないから定数で定義してるんだよ
意識するのは定数を定義するコードを書く時だけ
> 絶対アドレスが必要になったことなんてないよ
Offset( ) で書くにしても、基準のセルは絶対アドレスで指定するだろ
>>55 まだやるんかw
いや、基準のセルは俺も絶対アドレスで指定してますよね。
それ以外の部分では表の中での位置関係(表の何行目であるとか何列目であるとか)
についての情報のみが必要であって
それは基準セル(通常は左上端)からの相対位置が分ればそれで事足りると言ってるのです。
むしろ個々の要素についてまで絶対位置指定などしても可読性が下がるだけです。
まぁ、これはあくまでも普段からR1C1形式を好んで使ってる人間(つまり俺)の意見です。
この判断の優劣・良否・正誤等々については個々人の好みも有るでしょうから
どちらの考え方が優れているとかそういう視点での議論には決着がつかないと思いますけどね。
>>56 > むしろ個々の要素についてまで絶対位置指定などしても可読性が下がるだけです。
根拠もなしに下がるとか言われてもなぁ
とりあえず、
個人の感想です
って書いといた方がいいんじゃないか w
Excel マスターでない一般人は
>> 基準の位置と Offset の値の二個読まないといけないだけでも直書きより不利なのに、読みやすいとか笑えるわ w
だろ
> どちらの考え方が優れているとかそういう視点での議論には決着がつかないと思いますけどね。
はい、ループいただきましたぁ w
>>48 > どう書いてもたいして変わらんから、ごちゃごちゃ言い出した
>>29 とか
>>31 がバカと言う主張なら納得
>>57 >個人の感想です
>って書いといた方がいいんじゃないか
?
書いてますよね?
R1C1を使い慣れてる人間の意見だって。
一般人の定義がわからないけど
俺は一般人こそ表の体裁(つまり相対位置による個々の要素の関連)には気を使うけれど
その座標なんてものには関心を持たないと思いますよ。
俺自身一般人のつもりですし。
表の修正があったときに「L列から4列ずらす」ってのと
「12列目から4列ずらす」ってののどっちが分かり易いかなんて
俺に言わせりゃ一目瞭然で後者なんですけど、
あなたの言う一般人は前者を選ぶってんでしょ?
それについての価値観云々を論じることに結論が出るのかって話です。
>どう書いても
云々についてはすでに論述済みですが
全体を動かす場合には
基準セル1ヶ所のみを絶対参照で指定するほうが明らかにすぐれていますし、
レイアウトの変更であっても
Range表記で基準位置からの相対指定を用いるというのは
あくまで表の体裁の中だけに問題を帰着できるという意味で
レイアウトを記述するための手法として間違ってないと思います。
ところで、なんだか無理筋で反論続けてるように見えるのですが大丈夫ですか?
一応、われわれの議論を第三者が読んでどう判断するか
冷静に考えたほうが良いと思いますよ。
>>59 > 書いてますよね?
> R1C1を使い慣れてる人間の意見だって。
皮肉も理解できないの?
そもそもそれはその上の
>> 根拠もなしに下がるとか言われてもなぁ
にかかってるんだけど、そこはスルーなのな w
> 表の修正があったときに「L列から4列ずらす」ってのと
> 「12列目から4列ずらす」ってののどっちが分かり易いかなんて
あのさあ、反論できずに悔しいのはわかるけど、「ずらす」なんて変更がどれだけあるんだ?
って話に戻すの?
普通は、
>>13 の例だと 注文書番号 を少し左に寄せたいから AO1 から AN1 に移動させてくれって言われるんじゃね?
直書きならその部分のみを AO1 から AN1 に書き換えるだけ
で、君の方法だとどうなるわけ?
可読性がすごくいいんでしょ?
示してみてよ。
> ところで、なんだか無理筋で反論続けてるように見えるのですが大丈夫ですか?
> 一応、われわれの議論を第三者が読んでどう判断するか
> 冷静に考えたほうが良いと思いますよ。
鏡見た方がいいと思うよ w
>>60 >根拠
ですから、
>>59 とかそれ以前の
>>49 とか
>>54 とか
>>56 とかは
全部根拠について書いてるんですが。
意図的なスルーですか?
>普通は、
>>13 の例だと 注文書番号 を少し左に寄せたいから AO1 から AN1 に移動させてくれって言われるんじゃね?
>直書きならその部分のみを AO1 から AN1 に書き換えるだけ
>で、君の方法だとどうなるわけ?
いや、オフセット一個増やすだけでしょ
ところで、注文書番号 のAOは一番右端の列っぽいのであえてそこを選んでるんですか?
たとえばB列の外注業者名がずれたら残り全部ずれると思うんですけど。
んでもってそういった場合(一番右端の要素以外の変更の場合)、
「どこどこに@@って項目を追加するから、表を**の項目から全部右にX個ずらして」
みたいな話になるんじゃないでしょうか。
どうみたってオフセットのほうが簡単じゃないですか。
>鏡見た方がいいと思うよ
もちろん、俺は第三者を意識して書いてるので問題ないです。
貴方もそれで良いならこれ以上とくに言うべき事も有りません。
なお
>>61 は打ち間違えて送信しちゃいました。
たびたびスマン
>>62 > ですから、
>>59 とかそれ以前の
>>49 とか
>>54 とか
>>56 とかは
> 全部根拠について書いてるんですが。
レス番で書かれてもわからないので、該当の箇所を引用してみて
> いや、オフセット一個増やすだけでしょ
で、それが本当に AN1 を指してるのかどうやって確認するの?
可読性がいいんだから一目でわかるんだよね?
早く示してみてよ。
> ところで、注文書番号 のAOは一番右端の列っぽいのであえてそこを選んでるんですか?
一番最初の項目を選んだだけですよ
> みたいな話になるんじゃないでしょうか。
またその話?
>>37 > 仕様変更で項目順の変更とか途中に項目追加とかのほうが多いだろうけど。
って書かれてますよ。
> 貴方もそれで良いならこれ以上とくに言うべき事も有りません。
人のことをとやかく言う前に...
> なお
>>61 は打ち間違えて送信しちゃいました。
落・ち・着・け・よ
それよりParamArrayが参照渡しできないのはなぜなんだせ?
>>63 >該当の箇所を引用してみて
>>俺個人としては表の各要素の絶対座標よりも表のレイアウト内での相対位置のほうが重要だと思うんで
可読性は相対表記のほうが上だと思う。
>>絶対アドレスが必要ならそうだけど通常は表内部のレイアウトが問題なんだから絶対アドレスは気にする必要ないよね?
>>表の中での位置関係(表の何行目であるとか何列目であるとか)についての情報のみが必要であって
それは基準セル(通常は左上端)からの相対位置が分ればそれで事足りると言ってるのです。
>>俺は一般人こそ表の体裁(つまり相対位置による個々の要素の関連)には気を使うけれど
その座標なんてものには関心を持たないと思いますよ。
以上、大体全部同じことの繰り返しですが、この辺が俺の主張する可読性に関する意見の根拠です。
本文長すぎるんで続きます。
>>65 の続きです
ただ、ここに来て根本的な部分の食い違いを実感してるのですが、
>それが本当に AN1 を指してるのかどうやって確認するの?
>可読性がいいんだから一目でわかるんだよね?
というあなたの指摘自体が俺の考えている可読性の概念とは食い違ってます。
あなたは結局シート内でのセルの絶対位置指定やその確認でしか可読性を考えていないようで
俺は逆にそんなものにはこだわらず表のレイアウト中での位置指定という視点で可読性を捉えているわけです。
あなたのやり方は確かにあなたの言うようなシチュエーションでは有効でしょうが、
逆にここまでで俺の主張したようなシチュエーションでは可読性やメンテナンス性が劣るということになります。
たとえばこれですけど
> 仕様変更で項目順の変更とか途中に項目追加とかのほうが多いだろうけど。
途中に項目追加したらそこから先は全部ずれるでしょ?
(よほどスカスカの表なら別ですが、それなりに埋まってる表の場合にはそうならざるを得ません。)
そうするとセルアドレス全部直さなきゃならなくなります。
その場合には全部同じ変更(当該変更箇所を一律にオフセットずらす処理)
で対処できることってメンテナンスには大きなアドバンテージだと思いますよ。
まさか普通の業務ってのがスカスカの表でセル一個だけ変更する作業ばかりだなんて虫の良い事言わないですよね?
実際俺んとこじゃあこういう多数のセルを移動するような業務ばかりなんで俺にとってはそっちのほうが普通なんですよ。
>落・ち・着・け・よ
まぁ、打ち間違いとか変換ミスは良くやっちまうんでスミマセンとしか良いようないけど
重要なのは主張の論旨であってそれは読み手側にある程度の知識があれば
変換ミス程度は何がいいたいのか読解できるだろうからまぁ別にいいかなと思ってます。
>>65 根拠頂戴って言ったら
> >>俺個人としては表の各要素の絶対座標よりも表のレイアウト内での相対位置のほうが重要だと思うんで
> 可読性は相対表記のほうが上だと思う。
〜と思うってどこが根拠なんだよ... w
単なる君の意見でしょ
>>66 帳票って見たことないの?
結構スカスカだよ
例えばこんな奴
表の部分は元々複数出力するので VBA でループ回すから位置を変えるのは問題ない
ありがちなのは会社名とか見積もり番号の位置を変えたいとかで、他に影響することはあまりない
>>67 いや、それ言い出したらあなたの主張だって単なる個人の意見ですよ
たとえば帳票はスカスカだってのがあなたの意見なわけですが
そういうのじゃない表だってあるんですよ
ウチは科学技術系の職種でして
縦に時系列、横に計測項目(たとえば気温だったり風速だったり)で
複数の計測データをズラズラと並べるんですが
計測するパラメータが増えたり減ったりするんで表のレイアウトが変わるわけです。
そうすると一気に複数個所いじるのが当たり前になるわけです。
これってこっちの業界じゃあ結構当たり前のことで、
そういう時に絶対セル指定なんて使いづらくてやってらんないですよ。
あなたの主張が普遍的意義を持ってるならともかく、
こういう明らかな反例がある以上、
俺の根拠のみを私的意見だと言い切る資格はあなたにはないです。
Word VBAで [Shift+Enter] を押したとき、「Chr(11)」が入るみたいだけど、これって何なんですか?
アスキーコード一覧だとVertical Tabulation(垂直タブ)って書いてあるけど、
MSDNだと「タブ文字 (縦)。Microsoft Windows では使用できません。」って書かれててよく分からないんだけど、
Windows OSでは使わないけど、word(VBA)だと使ってる文字コードだよってこと?
wordもwindows版だから、Windowsでは使用できませんってのがよく分からないんですが・・
MSDN
https://msdn.microsoft.com/ja-jp/library/cc392241.aspx アスキーコード一覧
http://e-words.jp/p/r-ascii.html >>68 > いや、それ言い出したらあなたの主張だって単なる個人の意見ですよ
残念ながら違う
例えば...
> 基準の位置と Offset の値の二個読まないといけないだけでも直書きより不利
これには事実しか書いてない
俺の意見ではない
また...
> たとえば帳票はスカスカだってのがあなたの意見なわけですが
のようにスカスカに感じるかどうかは個人差があるから、実際の例を出してる
スカスカに思うかどうかは実物を見た人が決めればいい
> そういうのじゃない表だってあるんですよ
それはあると思うが、
>>13 の帳票が...
> 計測するパラメータが増えたり減ったりするんで表のレイアウトが変わるわけです。
とは全然違うことぐらいはわかるだろ?
また、どっちの帳票が世の中に多いかもわかるだろ?
あと、時系列で入力するってことは複数の行を扱うんだろ?
>>67 にも書いたけどそう言う奴は普通 VBA のループで処理するから、元々絶対アドレス云々の話じゃないと思うんだが
>>70 >これには事実しか書いてない
それ以前の前提条件として絶対アドレスを取得する必要があるかどうか
絶対アドレスでの指定が有効かどうか
といった論点が抜けてますよ。
あとわたしがスカスカに対比して問題にしてるのは
つまり他の箇所を巻き込んで移動させる必要が
生じるかどうかを区別していってるのであって
見た目がどうこうの問題ではありません。
複数個所を同時に変更するかどうかです
さすがにそのぐらいは前後の文脈から汲み取っていただかないと困ります。
どうにもご自分の土俵のみで話を進めようとしてらっしゃるようですが
どちらが多いかはともかくとして
(実際のところ世の中に技術系の業種とそうでない業種がどれぐらいの割合で存在してるかなんて知りません)
それにしたって
>>36 でいわれるような「滅多にないケース」というほどではないでしょうから
それについての言及はあってしかるべきです。
念のため指摘しておきますが
パラメータの増減は列方向ですしループ云々とは関係ないですよ
>>71 > それ以前の前提条件として絶対アドレスを取得する必要があるかどうか
だから相対の方が可読性が高いと言うなら、実例と根拠を出せばいいだけのこと
> 複数個所を同時に変更するかどうかです
個々の項目の細かい位置調整っ言うのは珍しくないよ
> どうにもご自分の土俵のみで話を進めようとしてらっしゃるようですが
何回も書くけど、見積書等の帳票と君のところの Excel シートみたいなのどっちが多いと思う?
> どちらが多いかはともかくとして
重要だけど不利だからスルーするってこと? w
> (実際のところ世の中に技術系の業種とそうでない業種がどれぐらいの割合で存在してるかなんて知りません)
技術系の業種でも会社なら見積書とか納品書とかの帳票はあるんだよ
> それにしたって
>>36 でいわれるような「滅多にないケース」というほどではないでしょうから
そこまで言うなら、どれぐらいあるんだ?
根拠とともに示してくれよ
> 念のため指摘しておきますが
> パラメータの増減は列方向ですしループ云々とは関係ないですよ
いや、少なくとも行方向はループで処理するから元々絶対アドレスでは無理だろ
そう言う状況なら列側も相対にするのは珍しくない
ただし、今回の話とは状況が違うからあまり参考にならないって話
>>72 >重要だけど不利だからスルーするってこと? w
>そこまで言うなら、どれぐらいあるんだ?
>根拠とともに示してくれよ
何でこっちにばかり立証責任があるんでしょうか?
あなたが具体的な根拠を示してくださいよ
データ処理系の表なんて日本中の研究機関その他で当たり前に動いてますんで
この辺はどっちが多いとか少ないとか証明するのは無理だと思います
ですので俺は遠慮しときます
>いや、少なくとも行方向はループで処理するから元々絶対アドレスでは無理だろ
データの頭にヘッダってのが付いてるときにループ開始行が変動するってのも割りとよくある話なんで
そこはやはりループ無関係ですよ
てかあなたこっち系の話知らないだけじゃないですか?
>ただし、今回の話とは状況が違うからあまり参考にならないって話
「今回の話」ってのを勝手に局限されても困るんですけど。
表の位置指定について話してたのに
その中で絶対アドレス指定が有利な状況ばかりに
限定して話を進めないでもらえますか?
それが多いとか少ないとかを論拠にするのは
あなたがきちんと証明してからにしてくださいね
>>69 > Word VBAで [Shift+Enter] を押したとき、「Chr(11)」が入るみたいだけど、これって何なんですか?
どこでShift+Enterを入力して、それがChr(11)だと確認した方法を教えて。
>>73 > あなたが具体的な根拠を示してくださいよ
書いてあるでしょ?
>> 基準の位置と Offset の値の二個読まないといけないだけでも直書きより不利
> データ処理系の表なんて日本中の研究機関その他で当たり前に動いてますんで
うん、その研究機関とかが日本中の企業より多いといいね w
> この辺はどっちが多いとか少ないとか証明するのは無理だと思います
君には無理だろうから遠慮するのは正解
企業統計とか研究機関の数って公表されてて、ざっくり研究機関が 8,000件、会社は 280万社ぐらいと言うことぐらいは覚えていても損はないよ
> データの頭にヘッダってのが付いてるときにループ開始行が変動するってのも割りとよくある話なんで
で?
普通に組んでいたら開始行を変えるだけでしょ?
> そこはやはりループ無関係ですよ
まさかベタ書きしてるの? w
> 「今回の話」ってのを勝手に局限されても困るんですけど。
元々、
>>13 の話
コメント見る限りは注文書の入力用シートの話であることぐらいは理解しようよ
>>74 wordで文章の途中でShift+Enterを入力して、
文章を全部選択した状態で、
マクロで↓みたいなのやったら置換されました。
Sub ReplaceSample()
Selection.Text = Replace(Selection.Text, Chr(11), "改行")
End Sub
>>77 >これって何なんですか?
WordでSHIFT+Enterを入力したときに入る文字です
>MSDNだと
そのページはVBAのページではありません
VBScriptで定数vbVerticalTabが使えないと言ってるだけです
>>80 英語のページだとNot usefulって書いてあるのか
使ってはいけないと言う意味での「使えません」じゃないって事だな
まあ、実際にWordで使ってるんなら使えばいいんじゃね
>>69 なんなですか?
って言われても、VT のコードって言うしかない
そのコードをどのように解釈するかはアプリケーション次第
>>75 もうやめとけ。
そいつは長いコード書いちゃいけないって俺は言っただろ。
そのうち事故るよ。
>>81-82 んじゃあ「Chr(11)」はタブ文字 (縦)ってことで、それ以上でもそれ以下でもないということですね。
ありがとうございました。
MSOfficeのパワーポイント2013のVBAについて、助言をお願いします。 現在、フォーマット修正用に、色々と文字列置換のVBAを作っています。 しかし、shape単位で置換を行うのですが、shape内のフォーマットが全て最初の文字のものになってしまいます。 ctrl+Hキーでできる置換のように、フォーマットを変えずに文字だけ置換する方法があれば教えて下さい。 よろしくお願いします。
すいません、勘違いがありました。問題なく出来ました。
OWCのグラフで値が空のとこを非表示にするにはどうしたらいいですか?
PowerPointでpptxを開いてPDFで保存するvbscriptを 書いたんですが発行中ダイアログが出てしまいます。 これを出ないようにする方法はないでしょうか?
VBScriptのスレって池沼みたいな変なコテハンがいて関わりたくないのよね
>>89 試しにパワポにマクロでPDF出力を作ってみましたが
別に何も出ませんでしたよ?
Office2013ですけど。
>>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
>>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 ぜんぜん見当違いだったらごめんなさい
>>94 よくみたら組み込み定数じゃなくて変数で宣言してましたね
見当違い以前のはなしでした
本当にごめんなさい
>>94 93ですけど、そのソースをコピペしてコマンドプロンプトから
実行してみましたが、家の環境(Win10)では普通にPDFできますよ?
ダイアログも出ませんでしたよ。
実行した時はスライド1枚の軽いPPTでやったのですが、
94さんは、もしかしたら結構スライド数多いPPTだから出るんですかね?
出てるダイアログが再現できないので、わからないのだけれども
↓のプロパティでどうにもならないんだとしたら、諦めるしかないのかも。
Application.DisplayAlerts
https://msdn.microsoft.com/ja-jp/library/office/ff746503(v=office.15).aspx >>97 スライド数は20くらいでしょうか。
>>98 試してみましたが残念ながら出てしまいました。
困りました。
Windows10でie操作のマクロって動くのですか? edgeは互換性あるわけでは無いですよね。 別にインストールするのですしょうか。 これでクリエイトするオブジェクトです。 CreateObject("InternetExplorer.Application")
Windows10でもieは入っているようです
http://simply-assi.com/windows10ie/ なら 操作は可能でないかな?
Windows10持ってるなら テストしてみるべし
自分は Win8.1だから無理だけど
>>101 自分も実機がないのよね。
ieが残ってるいうのは聞いてるんだけど、7や8からのアップデートでも、10のクリーンインストールでも何の設定もしないでも動くのかなと。
テストしてる人とかいないかな?
仮想用に買った10のUSBが今日届くから環境作り次第ObjIE試してみますん
受ける会社大丈夫? 下記の条件が全て当てはまる会社にご注意下さい。 ・IT系 in tokyo ・「社名 労基」でググると過去の2chスレが出てくる ・転職会議で2.5点
今、こんなグラフがあるんですが、
これを↓のようにするにはどのようにしたらいいんでしょうか?
>>106 縦軸と横軸を入れ替えたいのです。
画像として90度回転させたいわけではないのです。
>>107 >>105 は1枚めの画像を左に90度回転させ2枚めの画像としています。
現在、エクセルで1枚目のようなグラフがあるのですが、
縦軸と横軸を入れ替えたような(2枚目画像のような)グラフをエクセルで作りたいのです。
自分なりにいろいろ試したのですができませんでした。
>>108 入れ替えたグラフを既に作っているじゃないですか?それで完成しているのでは?
>>110 ああ、ごめんなさい。
>>105 の2枚目の画像は1枚目の画像を画像ビューワーソフトで左回転させたものなんです。
2枚目のようなグラフをエクセルで作成したいんです。
(今は1枚目のようなグラフをエクセルで作った段階です)
改めて質問させてください。
エクセルで↓のようなグラフがあります。
このグラフの縦軸と横軸を入れ替えたグラフを(エクセルで)作成したいのですがやり方がわかりません。
作成したいグラフのイメージは↓のようなものです(この画像は画像ビューワーで作成したものです)
わかりづらくてすみません。
>>113 Excel グラフ 回転
でググるとやり方でてくるけど、これじゃ駄目?
>>114 今エクセルを試せる環境ではないので検索してみた結果を眺めたところ、
線グラフや面グラフの縦軸と横軸の反転は非常に難しそうな印象を受けました。
難しいというか無理やりというか。
そこまでの労力をかけないと望む結果が得られないということはなんとなくわかりました。
そうであるならば現状を受け入れるしかないのかと思っております。
今回は諦めます。ありがとうございました。
>>113 Excelの質問かよ…
じゃあなんでExcelの質問スレじゃなくてここで質問するんだ
後出し条件出してくんなカス
>>117 あ〜〜VBA質問スレか・・・
すいません誤爆というかなんというか全く気づかず・・・
某サイトへのアクセスを1日1回、定時に行うためにIE操作を行うマクロを作っています。 必要な情報を取得した最後にそのサイトをログアウトしてIEを閉じたいのですが、ログアウトをしたときにJavascriptから?のログアウトしましたとの情報メッセージが表示されます。 ググッて調べたところ、以下の様な感じで閉じられるとあったのですが、SendMessageだけがうまくいきません。 ハンドルの値は入っています。 IE11を使っていますが、仕様が変わったのでしょうか?(Windows Updateでの最新) このメッセージを閉じないとその後の閉じるためのVBAは進んでいるものの、実際の動作をしてくれなくて困っています。 (手動でメッセージを閉じたらその後のIEを閉じる操作が終わった状態にまで一気に進む) わかる方いましたら教えて下さい。 Const WM_COMMAND As Long = &H111 hWnd = FindWindow("#32770", "Web ページからのメッセージ") If hWnd <> 0 Then Rtn = SendMessage(hWnd, WM_COMMAND, vbOK, 0) End If
>>120 値は取得できてます。
これが本当にメッセージのハンドルなのか調べ方を知らないので合ってるかは分かりません。
FindWindowも間違ってないと思うのですが、こちらも調べてみます。
WM_COMMANDの右2つの引数の指定の仕方が間違ってるのと 有効なウィンドウハンドルかどうかはIsWindowで取得できる
Rtn = SendMessage(hWnd, WM_COMMAND, 2, 0)
でうまく閉じてくれました。
>>122 さんレスありがとうございます。
質問が2つあります(長文すみませんm(_ _)m ○1点目:vbaを用いた自動化でdiv要素だけのボタンを押す方法 作業->ウェブのあるサービスにログインし、一定の操作をしてからログアウトする 問題->idとpassの入力はできたが、ボタンが押せない 構造的には下記アドレスのログインフォームと似ていて http://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でも変わらず) パワポでソフトトーク使いたいんだけど『開発』タブ出すところまではできてもVBAでマクロを記述〜っていうのができない。インポートするファイルの在り処か作成法を情弱にも理解できるように教えてほしい…
127 Visual Basicのウィンドウは出てきたしテキストもコピペしたけど wavが自分のファイルに保存されない。 マクロ実行しても何も起こらずウィンドウが閉じるだけ。パワポのファイルにも音源は見当たらない。
>>124 1点目はソースがないとなんとも。
2点目はHTMLDocumentあたりで定義したオブジェクト(変数?)にSetしてやれば参照できるよ。
理由はしらんがie.Documentみたいなままだと参照できない。
>>128 何をしてどうなったのか具体的に書いてもらわないとわかりません
パワポにマクロを組み込んで、softTalkのパスを指定して
スライドのノートに文章を書いて、マクロ実行、までは出来たという理解でOK?
>>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タグとどうに関係しているのかわからず詰まっている状態です。
途中だった For Each tag In ie.Document.getElementsByTagName("div") if tag.ID = "aaa" Then tag.Click end if Next でクリックできた。 そちらのサイトでも動くんでないか?
パワーポイントで、すべてのシートについて青い文字だけを黒い文字に変換するようなマクロを 作っていただけないでしょうか。
>>132 アドバイスいただいた方法で出来ました!
div要素をclick出来るとは思っておりませんでした。
本当にありがとうございます。
その後の処理も上で
>>119 さんのやりとりから調べて目的とする動作が出来ました
合わせて感謝します。
>>135 こちらもdivがボタンにできるのを初めて知ったので勉強になったよ。
ちなみに119もオレw
access2013でフォームからの入力期間の金額を集計してレポート作成をしようとしています。 vbaでレポートボタンを押下した動作と同じコードは存在しますでしょうか。
レポートボタンってのが何の事かわからんが DoCmd.OpenReport使えとかそういう事か? とりあえずACCESS VBAはそれ用のスレがあるからそっちで聞け
>>134 すべてのシートの、
すべてのテキストの文字色を、一つずつ調べていき、
(または、1文字ずつ調べながら、)
もしそれが青なら、黒に変更する
パワポのVBAでお願いします。 ファイル→情報→メディアの圧縮 わVBAからやりたいのですがどのオブジェクトのどのメソッドからやればいいのかわかる方いたら教えて下さい。 音声ファイルの圧縮がやりたいのです。
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 とまとめたいのですが、どのように処理すればよいでしょうか? いずれは金額も考慮したいと考えていますが、現段階では難易度を下げるために同一金額としてください。 同じ理由でここでは頭を固定で例を作成させていただきました。 よろしくお願いします。
>>142 VBA関係ないじゃん
書き込むスレ間違ってるよ
>>143 他にそれらしいスレがみつからなかったことと、この買い目を出す処理をVBAで行っているのでここで聞いたのですが
適切なスレがありましたら移動しますので、誘導願います
>>144 ごめん、
>>1 読む限りだとこのスレで問題なさそうね…
すまんかった
でもEXCEL VBAに行ったほういい気がする どうせEXCELだろ
>>142 そういうのはアルゴリズム系スレの方が受けがいいかと
あんま言語関係ないし
データ構造,アルゴリズム,デザインパターン総合スレ 2
http://peace.2ch.net/test/read.cgi/tech/1362301811/ 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>
>>152 vba xml 生成 とかでググるといくらでもやり方はヒットすると思うけど
具体的にどんなコードのどこで行き詰まってるのか書いてくれないとアドバイスしようがない
<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>
>>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 = "パパス"
ThisWorkbook.Save
で「指定したディメンションは、このグラフの種類では無効です。」のエラー発生。
エラーが出るときと出ないときがある。
VBAでグラフを操作している部分もあるが、それとは無関係と思われるSaveでこのエラーに戸惑っています。
↓このサイトで、SaveAsで存在しないパスを指定し同様のエラーが出た事例は見つかりましたが私はパス指定していません。
http://yaplog.jp/purplish-blog/archive/1838 エラー回避する方法を教えて下さい。
>>156 はエクセルの話です
win7, office2010
VBA内でセル指定をするときにシート名を明記しないと
そのセルがアクティブシートのセルになってしまってエラーが出ることがあるけど
VBAでグラフを作成するプログラムを作成していますが、エラーがでます。エラーの... - Yahoo!知恵袋
http://detail.chiebukuro.yahoo.co.jp/qa/question_detail/q1486687089 ぷぎえもん日記 VBA:実行時エラー1004グラフを作る時のエラーについて
http://pugiemonn.blog6.fc2.com/?m& ;no=985
その辺は大丈夫?
>>155 うまく行き作りたいものが作れました。ありがとうございます。
>>159 レスありがとうございます。
今出先なので明日帰宅してから確認してみます。
あ、書き込めた。規制かかっててレスできず申し訳ないです。
既存のブックに入れているマクロは正常動作しているんだけど、2,3日以前から作った
ブックは
オートメーションエラーです。
例外が発生しました。
ってエラーですぐ落ちてしまうんだけど、これって何が原因なんですかね。
(OS Win7Home excel2010)
なんせ、
Sub test()
MsgBox "test"
End Sub
ってだけのでも同じエラーで落ちてしまうんで┐(´∀`)┌
ちなみにウィルス対策はAVGでチェックかけて異常なしではありました
>>156 「vba 指定したディメンションは、このグラフの種類では無効です。」で検索!
>>163 「vba オートメーションエラー」で検索!
Declare 文でDllを指定するとき、絶対パスを指定するのとしないので挙動が変わるなんてことありますかね? パスの通ったフォルダにDllを置きDeclare文にはパスを書かない、という状態で何度テストしても失敗する(結果がおかしい)ので、 もしやと思って絶対パスを指定してみたら成功しました。何度やっても同じです。 念のため他のフォルダに同名のDllがないか確認しましたが、そんなものはありませんでした。 Window7、Excel2010(64bit)です。
下記プログラムでデータ貼り付け可能ですが、 Range(
どんな dll 使って、 どう失敗するのか とかじゃね?
>>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ファイルを
指しいてるのは間違いないと思います。
>念のため他のフォルダに同名のDllがないか確認しましたが、そんなものはありませんでした。 限りなくこれが怪しいと思うんだが
>>165 同名のdllが無いことをどうやって確認した?
>>175 パスが通っている全フォルダとカレントフォルダからの目視です。
環境変数(PATH)をまず確認して、
kernel32.dllにあるAPI 「GetEnvironmentVariableA」 に引数"PATH"を渡して出てきたフォルダを対象にしました。
問題のfuncABC も GetEnvironmentVariableA も同じVBAから発行しています。
カレントフォルダをどうやって確認したかとか システムディレクトリにdllがないかとか まあ、確認漏れ自体はいっぱいありそうだな
>>178 C:\windowsやC:\Program Files、C:\Program Files (x86)は入ってますよ。
目視も検索フィルタにとりあえず *.dll で全DLLを出してからやっています。
>>176 マジですか...
>>179 本当にひとつしかないならあり得ない挙動だと思うけど。
dllの内容を明かしてみな。
Windows が使用する DLL 検索パス
1.実行中のプロセスの実行形式モジュールがあるフォルダー。
2.現在のフォルダー。
3.Windows システム フォルダー。このフォルダーへのパスは、GetSystemDirectory 関数が取得します。
4.Windows ディレクトリ。このフォルダーへのパスは、GetWindowsDirectory 関数が取得します。
5.環境変数 PATH 内に記述されたフォルダー。
https://msdn.microsoft.com/ja-jp/library/7d83bc18.aspx >>177 ウインドウズの検索機能を使ってみたら?
何か仕事でもしながら、ディスク全部の範囲で、検索すればいい
windows なら黙って search everything 入れろ 考える余地なし
>>179 > 目視も検索フィルタにとりあえず *.dll で全DLLを出してからやっています。
プログラマーに向いてないんじゃね?
コマンドプロンプトで
dir /s /b \ABC.dll
ってやればいいだけだろ
>>180 ODBCのコネクションを張る関数で、特に自分の場所が関係する処理はしてないですね。
>>181-186 全ドライブを検索した結果(search everythingは入れてませんが dir/s はやってみた)
C:\Users\*****\Google ドライブ\
に見つかりました。
しかし、これを消しても現象は変わらなかった(もともと参照パスに入ってない)ので、諦めの気分です。
元々の質問は、挙動が変わることがあるか?で、 あるって回答で解決だと思うけど、どうしてもないってことにしたいの? ゴールが見えないよ
>>188 あるって回答(
>>176 )もあり、ないって回答(
>>180 )もありで、判断がつかない状況です。
それと、
>>173 と
>>176 もいまいち理解できておりません。
「dllのパスを取得」とは、実際の存在はひとつでもDeclare文での指定のしかたまでも検知できるんでしょうか?
まさか、パス・ユーザー名など、システムに関係する部分に、 日本語を使ってないだろうな? それで、バグってるとか?
そのDLLの作者が外人で、DLL内で、パス・ユーザー名を扱っていた場合、 もしその中に日本語が入っていれば、バグるかも
>>187 >ODBCのコネクションを張る関数で
それなら、そのDBのメーカーが(ドライバーが)、絶対パスしか許可していないのかも。
相対パスの危険性も考慮して、そういうアクセス許可にしているのかも
絶対パスを使えばいい
>>187 > 特に自分の場所が関係する処理はしてないですね。
ん?
自分で作った dll なの?
だったら自分でデバッグしなよ
全ドライブを検査してひとつしかdllファイルがなかったって言ってるんだろ。 それが本当なら何も対処できないよ。OSレベルの不具合。
VBAをコーディングするのに最適な画面サイズとモニターの台数は何台ですか? 縦と横どっちでつかってすか? 4Kディスプレイはどうですか?
エクセルの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
>>202 具体的にあなたが躓いているところがわかりません
>>203 具体的にあなたが何がわからないのかわかりません
>>200 For Eachで全シートループして、各シート最終行取得して貼り付ければ良いと思いますが、ダメですか?
匿名通信(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的に分散され、特定のサーバーに依存しません
l
EXCELのVBAでメール返信(OUTLOOK)をする仕組みを作りたいのですが、 元メールを引用するにはどうしたら良いでしょうか? タイトルやらアドレスやら本文がくっついてないと、 どうも返信感がでないと思いまして。
>>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
Excel向けだとVBA関連の本は結構あるのにOutlookのVBA本って あんまり無いですね。 Outlookの仕分け機能では宛先とCCに○○から来た時に動作する 条件を付けられますが、宛先○○から来た時には動作するけど CCに何か入っていた場合は動作しないマクロは作れないでしょうか。 環境はWin7、Outlook2010です。
>>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
【Win10】 こんな犯罪級OS薦めんなよwww ↓ 【スパイウェア】 この使用許諾契約書には書かれています ”最後にあなたのコンテンツを含む個人データ(例えばあなたの電子メールの内容や―プライベート通信やプライベートフォルダ内のファイル)にアクセスし―開示し保全します” 開示する ここ重要だよ 契約がなければ通常 高度な違法行為になりうることです それはあなたが自分の意思としてこの契約書に同意したのです VIDEO 【秘密保護法】 ナチスの手口でサヨクを捕まるんだろ? 早くやってみろよ m9(^Д^) 【緊急事態法】 スノーデン氏→国家秘密法は諜報機関NSAの日本での活動を容易にするために米国が設計して日本政府に導入を要求したもの。 全日本人が調査の対象であり、NSAはあなたの交際関係、信仰等の個人情報を把握している。 https://twitter.com/hopi_domingo/status/740193540529999873 今朝、辺野古で新基地建設に反対するママの会メンバーに対して、機動隊員が「お前たちには汚い血が流れている」などと暴言を吐いたそうです。 自分のやっていることを「だってお金欲しいもん〜」「俺の写真を待ち受けにしろ」とも (顔写真) https://twitter.com/MothersNoWar/status/690357793702940672 サンマ以降のバラエティ芸人の大半が、暴走族出身で極右思想。原発反対派を「放射脳」と嘲笑する連中。 芸能界極右は石原慎太郎一家を筆頭に、上田晋也 草野仁 津川雅彦 向井理 松本人志 宇多田ヒカル マツコ 春日俊彰 田村淳 北村晴雄 https://twitter.com/tokaia mada/status/630627400552845312 vbaでshell関数を使って指定パスのエクスプローラをファイル選択状態で開いてるのですが、 家でやると何でもないのですが、会社でやると、その方法で立ち上げたエクスプローラは 1分〜数分以内に「エクスプローラは停止しました」となって落ちます。そのフォルダだけ 落ちるので他のは巻き込まれないだけマシですが、手動で立ち上げた他のエクスプローラで このように不意に落ちた事はないので、プログラムから立ち上げたエクスプローラが特別 不安定だとしか思えないのですが、原因が不明です。 それで、家と会社の違いは、会社だと共有フォルダを開いている事です。 家ではテスト環境をローカルで構成している為か、全く問題は起きません。 色々ぐぐってみたのですが原因が不明です。 vbaから開く方法で、解決策、あるいは次善の方法等ありますでしょうか。 shell関数はこのように使っております。 Shell "Explorer.exe /select, """ & path & """", vbNormalFocus 環境はWindows7 Excel2010(32bit)です。
>>215 試しに自宅の環境で共有フォルダをshell関数でファイル選択状態で開いてみたけど
特に問題なかったよ
原因は共有フォルダであること
ではないのじゃないかな
その共有フォルダへのショートカットを作って
それをshell関数を使ってexplorerで開いてみるとかは?
手動で起動したプロセスは、親プロセスが無く、単独のプロセスだから、ずっと生き残るのかな? Aプログラム(Aプロセス)から起動したプロセスは、親プロセスがAとなり、 Aを終了すると、その子プロセスもすべて、連鎖して終了するのかな? プロセスを起動する際、親子関係を切れば? ただしそうすると、起動されたプロセスは、A終了後も残り続けるから、 誰がそのプロセスを終了するのかが、問題となる 漏れは、Windowsはよく知らない。Linuxから推測して書いた
>>216 ショートカットから開く方法ですか、考えもしなかったです。
確実に再現するバグではない(場合によっては20分くらい経ってからクラッシュしますし、端末によっては何も起きなかったりします。)
なので、原因を掴むのが難しいです。
>>217 なるほど、プロセスが分離されているから巻き込まれなかったんですかね。
前後のコードを見返しているのですが、shell関数を読んだ直後に
Kill thisworkbook.fullName
thisworkbook.close
を読んで終了させているんですが、ひょっとしたらこの兼ね合いが原因かも?とふと思いました。
shell関数は非同期処理で、会社の共有フォルダを開くときはローカルと違って若干起動に時間がかかります。
shell関数の処理が完了しきっていないのに即終了させるから、動作が不安定になってる可能性はありますかね・・。
なのでとりあえずShell関数を、Wscript.ShellのRunメソッドの同期処理に置換えてみました。
それで明日会社でテストしてみます。
>>219 同期処理に変えたら全く落ちなくなりました。
どうやら推測は当たったみたいです。
手動で立ちあげてる時には同じトラブルは一度も起こったこと無く、誰からも聞いていないので、
VBA処理が原因で間違いないと思います。
ぐぐっては見てたんですけど、VBA関連でのエラー報告は0でしたね。
しかし、元々この手のトラブル報告がかなり多いことにはびっくりしました。
とりあえずは解決です。皆さんどうも有難うございました。
タイミングの問題で、バグが起きるときは、 sleep 3秒などで、時間稼ぎすることが多いな
>>221 タイミングというか処理を待ち合わせる必要があるって事だよな
3秒で完了しない処理だと問題が起きる
90%くらい解決出来れば実用上は問題にならないかも知れないけど
' キャッシュ反映を待って5秒待つ ↑これなんとかして
>>223 何のキャッシュか判らないけど
キャッシュをフラッシュするインターフェイスがあればそれを使えば良いのでは
無いなら知らない
起動方法と起動のタイミングの問題で >1分〜数分以内に「エクスプローラは停止しました」 >場合によっては20分くらい経ってからクラッシュ のような症状が出るとは考えにくいけどな まあ、直ったって言うならそれでいいけど
vbaの And, Or って短絡評価してくれないの???
>>227 普通しない
(常にしないかどうかは知らんけど)
X(n) And Y(m) で X(n) = False だった場合、Y(m) は評価しなくても式が False と確定する Or でも同様のことが可能 VBAがショートサーキットしているかどうかは、各関数で Debug ログを出力してみればわかる
>>229 いちいち短絡評価の説明なんてしなくていいよ...
くぅ。 短絡評価してくれるもんだと思って、 True, False, Nullを返す関数の結果で、 NullをFalseに倒したくて、 左辺でNot isNullやってたけど、 右辺もNullで動いてしまってエラーになってはまったわ。
.NetならOrElseやAndAlsoが使えるし Nullable指定も出来るから便利なんだけどなー まあ無いものねだりしても始まらないか
VB(A)はWithとかある割にそういうとこは全然気が利かないよな C言語すら知らない人が作った言語なんだろう事は判る
VBって元々はMSじゃないんだよね BASIC好きのゲイツが惚れ込んで買収しただけ
漠然と「VBAの初心者向けの本を教えてください」ってのはよくあるが、上級者向けは珍しいね ある程度基礎が身に付き、やりたいことが分かってきていれば ○○に関する本、ってなるように思うんだが・・・ 田中亨氏の「Excel VBA 逆引き辞典パーフェクト 」は名著だよ
>>237 ありがとうございます。
クラスや多段階配列、イベント自作、擬似コントロール配列あたりの情報がある書籍はありませんか?
アプリ作成で学ぶExcel VBAプログラミングユーザーフォーム&コントロール(横山達大著) かんたんプログラミング 応用編(大村あつし著) 同じく、かんたんプログラミング コントロール関数編 デバッグ関連だと 立山秀利著の本
VBAでコードを抜き出してSVNやgitで管理したりするとそれだけで上級者っぽくなる
PowerPointのVBAでファイルを閉じた後も変数の値が保存されるようにしたいんですが外部のテキストに書き出す以外にファイル本体にどうにかして埋め込む方法はありますか?
透明のシェイプとかに書くとか色々あるけど 実際本体ファイルを更新されるとバージョン管理とか使う側が気持ち悪がるとか運用面で問題が出そう
Excel脳っすなぁ 標準的なユーザーデータ保存場所がちゃんとあるんだからそれ使えばいいじゃん
>>246 条件によるだろ
思いつきで即答すんなアホ
>>249 条件って
ファイル本体に埋め込みたい
ってことだろ
>>246 の保存場所がどこの事を言ってるのかよくわからんが
>>245 より
>>248 の方がはるかにマシ
ファイル本体に埋め込みすんのがアホなんだよわかれよ素人 ゴミを量産して人に迷惑かけないでくれ 独りよがりの仕事してんじゃねえよ
実際に仕事してるとそれこそ基地外避けを作る必要が出てきたりするんだよな
ユーザーデータを変な場所に保存したりするやつとか避けないとな
>>254 > 変な場所に
透明のシェイプとかのことですね、わかります
50枚のスライドが入ったパワポが5個あります。 これを統合したいのですが ファイル1の1枚目 ファイル2の1枚目 ファイル3の1枚目 ファイル4の1枚目 ファイル5の1枚目 ファイル1の2枚目。。。 という順番にしたいのです。 どういうマクロを書けばいいでしょうか?
ExcelVBAをつかいこなしていても パワポはマクロの記録がないと腰が重いな
>>256 この作業用を何回も繰り返さないといけないの?
1度きりならあなたの場合は手作業の方が早い気が
>>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(新規のファイル)
選択されているセル範囲内の文字、図形を削除する手順を作ってみましたが、処理がえらく重いです。 もっと処理を早くする方法はないでしょうか? 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
>>263 再計算とイベントも停止してみた?
あと、コレクションに対するループの中で自分自身のコレクションが変化するのは、なんとなくまずい気がする
根拠はないけど、それって遅くなる要因と違う?
処理の基本をよく考えるべき。 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 じゃ駄目?
選択されているセル範囲については最初のIf文でExit Subしてるから削除されないんじゃ? 処理がよく分からん。 選択されているShapeの下のRangeの内容を削除したいならshp=Selectionの場合に Range(shp.TopLeftCell,shp.BottomRightCell).ClearContents で良いんじゃ?
shp=Selectionの場合じゃなくてshp Is Selectionの場合だな。 shp.Deleteの前ね。
>>265 質問者じゃないけど変わって説明するよ
・シート上に文字と図形が複数箇所に設定されている
・消す範囲を選択して、その範囲内の文字と図形を消すコードを書いた
・でもなぜか遅い
質問者に言えるのは、
・Selection.ClearContentsはfor eachの外でいい
・試しに100個のshapeを貼り付けて50個くらいが入る範囲を選択して消してみたら一瞬で終了(もちろんコードでだよ)
・遅いって具体的にどれくらいなの?
>>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
じゃ駄目なの?
今までは長い時で1〜1.5秒程止まっていました
>>268 さんの言われた通り、Selection.ClearContentsの位置を変えたらスムーズになりましたのでこれで行こうと思います
たくさんご意見頂きありがとうございました
>>269 > If TypeName(Selection) <> "Range" Then Exit Sub
だよ
エクセルのマクロでも質問大丈夫でしょうか? 名前と同じファイル名の画像を名前セルの隣に貼り付けるプログラムなんですが 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\"の部分をフォルダ選択できるようにできるのでしょうか?ご教示お願い致します。
>>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" じゃないかな? あと 元コードもそうだけど フォルダ内に その画像ファイルが存在してなかった時の対策も必要だと思うよ 同じエラーになるぞ それとも絶対 あるのが 確定してる? >>273 大変ありがとうございます!
ただ、貼り付ける画像は複数あり、貼り付けるたびにフォルダ選択画面が出てしまいますので、一気に貼り付けられないものでしょうか?
ファイルが存在してない時の対策は、セルの状態を色変えて罫線で斜線を挿入したいと考えてますが、まだそこまで進む前段階がクリアできないので困ってます
よろしくお願いします
>>274 ん? そこは分ってるとおもたよ
フォルダ選択部分は Forループの外だよ
↓ここねw
With Application.FileDialog(msoFileDialogFolderPicker)
If .Show = False Then Exit Sub
t = .SelectedItems(1) & "\"
End With
>>275 あっ!できました!ありがとうございます!助かりました!
こんにちは。 パワーポイント2013のVBAについて分かる方教えて下さい。 やりたいことは、グラデーションの塗りつぶしがあるシェイプのGradientStopsのそれぞれの色を変化させるアニメーションの方法です。 2013ではできないけど2016ではできる等の情報もあればお願い致します。
俺が手を下すまでもないな
答えてやれよ
>>280 VBAだけってのが 外部コントロール使用禁止 API呼び出し禁止 なら不可能です
VBAの変数の値を次回の処理を行う時まで記録しておくのにセルに書き込みをしたりしていますが、 セルにアクセスするのを減らすためにセルに記録しなくて処理終了時に変数値をVBA内で保存しておいてくれる一次記憶領域みたいな物はないのでしょうか?
ちりも積もればの話ですが 足し算引き算割り算レベルの計算をセルに関数を割り当てて行うのと 同じ計算式を変数を用いてVBAで書いて実行するのとで、より処理速度が速いのはどちらでしょうか?
>>281 セルでいいんじゃないの?
ただそのIOは配列アクセスを使うべき
ループで1セルづつ読み込むとかがナンセンス
>>281 説明がいまいち分かりにくい。
次回ってのは何時のことを言ってる?
グローバルな変数じゃダメなの?
次にそのブックを開くまで保持したいならセルってのも分かるんだが。
で、その場合にセルの代わりに保持したいならCustomDocumetProperties使ったりするかな。
>>283 ありがとうございます。
>配列アクセス
勉強してみます。
>>284 Bookを閉じずに他からデーターを取り込み再度VBA実行を繰り返します。
>グローバル変数
>CustomDocumetProperties
勉強してみます。
グローバル変数に代入した数値は処理を中断しても生き続けるのであればそれで解決しそうです。
>>284 プロシージャの上に定義すると処理が終了しても最終定義された内容は残ったままなんですね!
今まで処理を中断する必要がある場合は変数をすべてセルに書き出していましたが大発見です。ありがとうございました。
Public変数もしくは通常の変数の指定数の限界はあるのでしょうか? 問題なく動くレベルは何個ぐらいでしょうか? 50個 100個 1000個 10000個でも平気だっり? 実は 100000個以上でも問題ないとか?
>>287 使えるメモリは決まってる
変数の個数じゃなくてそれぞれのバイト数の合計
>>287 グローバル変数(Public)は便利に見えるけどスコープを考えて必要無い所では使わない方が良い。
PublicかPrivateかプロシージャ内で宣言するかを意識して使った方が良いね。
日曜の午後からずっとVBAを書いてるけどまだおわらね〜 てかやればやるほど選択肢が爆発的に増えてきて一生かかってもおわりそうにね〜!w
>>287 しかもEndやErrorで抜けたら破棄されるという罠
素数や組み合わせ爆発のような数学の迷宮的な問題に陥って 一生かかってもコードを完成させるのは無理ですよみたいな場合もあるのでしょうか?
>>292 数学的バックグラウンドがなければコードが書けないという類いの問題はあるね。
たとえばNP困難なやつ。
巡回セールスマンとかナップサック問題とか、ナーススケジューリング問題とか。
自力でなければ、それなりの回答が得られる解法(コード)が既に存在してるものもある。
問題を解く方法を考案するのと、その方法をコンピューター言語に翻訳する作業は別ですわ それぞれに異なった知識と才能が必要となりますので
>>291 End Subの行にブレークポイント、これ
パブリック変数で 1000個 10000個でも平気だっり? とかどんな拷問なんだよw
テストしてみたがパブリック変数500個は問題なく動いた。 もっと使ってる人いる?
変数の一部を変数にする事は出来ないのでしょうか?(代入 とかではなく) たとえば↓はイメージですが変数名の箇所を文字列をつなぎ合わせる時と 同じように変数をわりあてられないのでしょうか?(以下は動きませんがphpではこれができます。) dim aaa1 dim aaa dim no dim bbb aaa1=例文1 aaa=aaa no=1 aaa & no = bbb msgbox bbb ↓ 結果は「例文1」 と表示されますみたな、、
>>299 最終的には
aaa1=「例文1」
aaa2=「例文2」
aaa3=「例文3」
・
・
とし
aaa & no のno番号だけ差し替えて制御するみないな感じで使います。
ただしnoの番号は連続した数字ではなく他の集計結果からランダムに発生するため
ループ処理等では成り立たず変数のように扱う必要があります。
>>300 aaa1とかaaa2を変数として捉えず、文字列と数値を要素に持つ2次元配列と見れば良い
で、データ全体を制御するときは、aaa1,aaa2...の2次元配列全てを要素として持つコレクションオブジェクトを生成して操作する
>>300 Dictionaryのkeyにすれば良いんじゃね
CollectionよりDictionaryだな、確かに
そういう質問、初心者によく聞かれるわ 普通は配列を使えと教えるもんだが
>>302 >>301 ありがとうございます。Collection Dictionary 調べてみましたが
どちらも説明をざっと読んでも使い方が理解できませんでしたが挑戦してみます。
phpのように (aaa & no) =
と変数名自体を複数の変数で合成する事は出来ないのですね。
>>300 >>301 >>302 >>304 aaa1=「状況に応じて変化する数値1」
aaa2=「状況に応じて変化する数値2」
aaa3=「状況に応じて変化する数値3」
・
・
すみません説明を単純にするために「例文1」としてましたが
変数に格納されるのは状況に応じて変化する数値(他の集計の計算結果)でした。
固定された文言であればDictionary keyで処理できるというのはわかりましたが
格納されている物が変化する数値の場合かつ
変数名を数字で管理(他の集計から3という結果が出たら→aaa3が適応されるみたいな)
したい場合こういうことを実現する方法はありますでしょうか?
>>306 変数名を数字だけで管理する方法はない。
VBAの仕様上、できない。
というか、その集計結果なるものがプログラム実行時に決定するのだとしたら、集計結果を格納する変数の名前に集計結果の数値をはじめから盛り込もうとするのは無理があるし、そもそも理由が分からない。
やりたいことを実現するにはもっと適切な他の方法があるんじゃないかな。
>>306 Dictionaryのvalueは変更可能
>>308 >>307 理解するのにかなり時間がかかりましたがDictionaryなんとなくわかりました。
これって Dim とかPublicとかの変数とは別に存在できるんですね。
全く未知の分野ですが使ってみます。ありがとうございました。
Dim dic As New Dictionary Dim i As Integer dic.Add "キー1", "アイテム1" dic.Add "キー2", "アイテム2" dic.Add "キー3", "アイテム3" Dictionaryで指定した"キー"と "アイテム"は処理が終了するとリセットされるようですが、 グローバル変数のように処理が終了しても次実行されるまで記憶させておくようにする事は出来ないのでしょうか?
>>310 プロシージャを跨いで値を保持させるなら、グローバルな配列変数、(アプリケーションがExcelならば)セル、シェイプ、カスタムドキュメントプロパティ、グローバルコレクション、自作のグローバルクラスのインスタンスなどに値を記憶させるしかない
でもそれならわざわざプロシージャ内でDictionaryを使って連想配列を操作するより、ExcelのセルにKeyと値を書き込んで配列アクセスして読み書きする処理の方が遥かに楽だと思う
>>311 ありがとうございます。
今作っているコードでセルへのアクセスが膨大になってきて処理時間がどんどん長くなる傾向がみられまして
全操作をセルにアクセスせずに完結させようと色々考えていましたがなかなかそうはいかないようですね。
>>312 Dim dic As New Dictionary
の宣言を何処でしているかによるんじゃね?
>>312 標準モジュールとかでDictionary型のオブジェクト変数をグローバルスコープ(Public)でNew宣言すれば、処理を抜けてもDictionaryのItemは初期化されないんじゃないのかな
ただ単なる配列の処理でデータが数千件程度なら、描画止めた状態でワークシート使った方が遥かに楽だと思うが。
>>311 引数に渡すってのを忘れてるぞ。
一番使われてるんじゃないか?
>>316 プロシージャを跨ぐって話だろ。
別のプロシ−ジャに引数として渡せば形の上ではそれぞれのローカル変数でも値は保持されるだろ。
>>317 >>310 を読んでなんとなく、一個のルーチンのプロシージャ間の値の受け渡しの話ではなく、ルーチン内で一度AddしたDictionaryのKeyとItemを何らかの形で保存して、同じルーチンを再実行したときにKeyとItemを再利用することが出来るかどうかという話だと思ったんだが
まぁ、オブジェクトプロパティへの値の保存も実際はそのオブジェクトを定義してるクラスのメソッドに引数を渡してるのと同じだから、変わらないといえば変わらないけど
超既出FAQですな。
『Public 宣言された変数の有効期間』
https://support.microsoft.com/ja-jp/help/408871 簡単に言うと、メソッド実行中以外はいつでもpublic変数はクリアされうるから、値が残っていることを期待したマクロを書くなってこと。
>>319 俺は使う時にクリアされてるかチェックしてクリアされてたら再設定するようにしてるな。
値が0だったら値を取得するFunctionを呼び出すって感じ。
Publicな静的変数は使わない。 エクセルのセルとかワードの文書変数とかの規定オブジェクトにデータを書き込んだ方が便利
>>321 いや、それは格好悪いんじゃね?
セルを使ったりCustomDocumentPropertiesも使うけど、それに合ったものだから使うわけでPublic変数に合ったものもある。
適材適所だろ。
ontime で実行するプロシージャって標準モジュールに書かないとあかんのか。 このブックでマクロが使用できないか、またはすべてのマクロが無効になっている可能性があります。って出た。
>>323 スコープ
普通にCallで呼び出せる場所にないと実行できないのは、どの方法でも同じ
>>324 ThisWorkBookのモジュールからOnTimeでThisWorkBookのモジュール内のPrivate Sub を予約したんですが・・・これじゃ駄目なんですかね?
>>325 です
OnTimeで実行予約するプロシージャを標準モジュールに移動したら動くようになりました〜
特定の文字が含まれているセル(複数ある)を検索し、 検索されたセルを含む行全体(Entirerow)を同時選択する方法 以上お願いします。
その文字を含むセルを、行ごと削除したり、行ごとコピーしたりと、いろいろしたいので質問致しました。
鮮やかな丸投げっぷりにワラタ 作成依頼OKな Excel VBAスレと間違えてない?
>>328 とりあえず、複数行を選択するところをマクロの記録で見てみたら?
ctrlキー押しながら選択するのとshiftキーを押しながらのとで。
検索対象のセル範囲でForループを回す セル値に特定文字を含むセルが見つかる度にEntireRowを取得して変数に入れるかUnionで選択対象の範囲をマージしていく ループ終了後にSelectする 以上
>>327 Ctrl+Fで検索しろやボケナス
ちゃんと行選択までしてくれるぜ
ごめんなさい、質問者です。 ここじゃなかったのですね。上に上がったやり方でできそうなのでやってみます。ありがとうございます
色々細かい条件でどんなコードが効率いいか、変わってくるでしょ。 例えばそのセルがあるのは、特定の行だけとか、検索文字列はセルに完全一致なのか含まれるのか、など。
331だが、同じ行に該当セルが複数ある場合は無駄が生じるな 実現したい機能次第だが、工夫が必要かもな
はじめまして。以下2点、教えていただけると幸いです。 環境は、OS:Windows7, Excel2010です。よろしくお願いします。 1.プルダウンの初期値設定 セルA1にりんご、A2にバナナ、・・・のようにA列にある項目をプルダウンで選択したいです。 このとき、「A列のj行目(パラメータ選択可能)を初期値にしたプルダウンをB1に設置する」VBAのコマンドを教えていただきたいです。 2.ファイル名の変更 aaa.txtというファイルをデスクトップに出力するマクロを作れました。 このマクロ実行後、再度実行するとaaa(2).txtのファイルを、再度実行するとaaa(3).txtのファイルを出力・・・ このようなVBAのコマンドを教えていただきたいです。
>>336 txtファイルをデスクトップに出力っていう日本語の破壊力がやべぇ
>>336 1
・B1セルを選択してからマクロの記録を実行
・入力規則でリストを選択にリストの内容でA列を選択する
・マクロ記録の終了をする
・できたコードを修正してA列の任意のセルをデフォルトにするように変更する
2
・デスクトップにaaa.txtが存在するかチェックする。
・存在しない場合はaaa.txtを作成して終了。
・存在する場合はDo~Loop中にデスクトップにaaa(i).txtが存在するかチェックする
・存在する場合はiをカウントアップして次のループ
・存在しない場合はそのiを使用してaaa(i).txtを作成して終了。
A1セルに =NOW()-TODAY() と入力すると 現在時刻が表示されますが。 MsgBox Range("a1") とすると 0.0110212・・・と言ったような数値が出ます。 Dim now As Date now=Range("a1") と型を指定した変数に格納してやると MsgBox now で 21:49:32 といった一般的な時間表記を示せますが、 変数化を省略して MsgBox Range("a1")〜に補足コードを書くなどで同じ処理を実現する方法は無いのでしょうか?
MsgBox Range("A1").Text とか MsgBox Format(Range("A1"), "hh:mm:ss") とか
>>341 なんと!!
変数をだらだら定義すること無く綺麗さっぱり解決できました!ありがとうございました。m(_ _ )m
プロシージャの中で1回しか使わないのに、わざわざ変数にするやつとかいるよね。(しかもハンガリアン記法で) 100行に満たない程度のコードなら、Withステートメント使ったほうがむしろ可読性は上がる。
マシンパワーが貧弱だった大昔ならともかく、今時はリソースを気にする必要なんてないんだから、可読性を最優先で記述するべきだよ。
>>343 ああ、俺だ。
Ubound(配列)とか、For〜Nextの中で何回も実行すると、
なんか遅いような気がして、一度変数に入れちまう。
>>345 何回も実行するなら変数に入れたほうがいいんじゃね?
>>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の配列とかメモリーならばほとんど気にしなくていいです。
ですから、メモリー内で処理して最後の最後にシートに書くようにしてます。
>>347 > ですから、メモリー内で処理して最後の最後にシートに書くようにしてます。
基本中の基本だからいちいち書かなくてよろし
アノニマスに入会したいんですがVBA知ってるだけで入れますか? あと入会ってどうやんの? スーツ着て履歴書持って事務所に面接に行くの?
超初心者です 同じブック内の複数のシートにある顧客データをUserFormを用いて(検索するイメージ)抽出し、別のシートへ出力するコードを書きたいのですがいまいちわかりません。 大変困っているのでヒントをくださればありがたいです。
>>351 超初心者には無理です
パソコン教室に通ってせめて初級をクリアしてから質問してください
>>352 返信ありがとうございます
Excel自体触ったことない超初心者ですが頑張っているところです( ??? )
>>351 自称初心者がどこでUserFormとか覚えたの?
まずはシート上でやってみようね
どこで覚えようとお前の知った事じゃねえだろw なんだこのバカはwww
>Excel自体触ったことない超初心者
ユーザーフォームを作ったことはあるのか?
無けりゃ、この時点でやろうとしていることはもう無理
VBAはほんの少しでも書いたことはあるのか?
まぁ最初は
>>354 の言うようにシート上で実現して、それをユーザーフォームにもっていくのが順当
というか触ったこと無いって時点で釣り確定
VBA参入門書とネットの知識を詰め込みました。
Excel初心者は本当です。友達に教えてもらいつつやっています。気分を害された方、すみません。
>>356 さん非常に分かりやすいです。
二日間くらい最初からコードを書こうとしてもがいていましたが、マクロの記録が使えそうな気がします。
そのコードをいじってボタンで起動するユーザーフォームとくっつけるイメージで挑戦してみます。
>>354 さんもありがとうございます!参考&励みになります
>>357 ユーザーフォームでその機能を実現する必然性が感じられない
フィルタオプション機能を用いて、検索結果の出力先を新規シートに設定するだけで事足りると思うぞ
フィルタオプションとマクロの記録で8割方完成できるな
ADOの事でちょっと質問です 変数を定義する時に Dim wkR as New ADODB.Recordset ってするんだけど、RecordsetとRecordの違いって何?
>>361-362 ありがとうございます、簡単なプログラムですが完成して感動しました。
Ifとマクロの記録が万能すぎることを肝に銘じてこれからもがんばります( ??? )
>>365 万能過ぎないけどね。
そればっかり使ってる人は永遠に初心者なままだし、色々な面で出来の悪いプログラムになる。
自動生成されたコードのそれぞれの意味を理解して自分なりに書けるようになると上達する。
例えば
Range("B4").Select
Selection.Value=10
のようなコードが生成されると思うけど意味を考えたら
Range("B4").Value=10
で良いとわかるよね。
すみませんお力添えをお願いします! エクセルマクロ(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
>>367 説明サイトへのリンク、ありがとう。
取り敢えず、「階層構造のデータ間を移動する手段として」のRecordオブジェクトは使うこと無さそうw
IF文初心者ですが 3つ数字の中から一番小さい数を判定したいのですが、 elseや入れ子で複数書けば判定できるというのは推測がつきますが 最も簡潔に記述するとしたらどんな記述方法がありますでしょうか? 例) 33 12 3 ↓ 3を抽出
>>370 最小値 = WorksheetFunction.Min(Array(33, 12, 3))
>>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 >>372 >>371 明確な答えをありがとうございます。
やはりIFの場合は372が妥当なようですね。
>>372 は < じゃなくて <= にしないと誤判定する
例題の対象が3ではなくて1000とかに増えたら破綻するだろw
>>375 数字3つという前提を勝手に変えるこういう馬鹿はなんだろう
汎用性を考慮しないのか。 なかなかひどい。こういう人もいるという参考になったわ。
372のはアルゴリズムと言うよりその場しのぎの対応
配列に入れてループで最小値と比較して小さければ最小値を更新していくのが定石なのでは。
だからMin関数で一発なのに、無駄に車輪の再発明をしたがるやつが多くてリンダ困っちゃう
>>379 順次比較も立派なアルゴリズムの一種なんだが
IF初心者とか言ってる人に何言ってるんだか あといつからこのスレはEXCEL VBA限定になったんだ
>elseや入れ子で複数書けば判定できる >最も簡潔に記述するとしたらどんな という問いに、elseや入れ子の回答するのは無能以前に答えになってないのとちがう?
え?え?日本語理解できてる? 質問には「Elseを使わずに」なんてどこにも書いてないぞ ざっくり意訳すれば「IfとElseの数を最小に」する方法を聞いてるんだろ
372のは374が書いてるように、例えば x=1 y=1 z=3 と入れただけで誤判定する。アルゴリズムの最低限を割ってるぞ。 372がベストアンサー(笑)だと質問者が思ったなら気の毒なので念のため。
そもそも計算量も最少じゃないしな 普通に 最小値 = x If y < 最小値 Then 最小値 = y If z < 最小値 Then 最小値 = z ってやる方がわかりやすい
うん、ベストアンサーはMin使った方だね。 俺だったら迷わずMin使用する。 同時にMin使わない方法も考える。 配列ループも考えた。 でも、別にIf文使っても良いんじゃない? そんな目くじらを立てるようなことじゃない。
だから372はif elseだとしても最小(計算量的に)の答えにもなってないし、そもそも答えとして間違ってるって話だろ
それは勉強する奴と仕事にしてる奴のスタンスの違いだな。 仕事にしてる奴はIfを使わなきゃならないなんてことに遭遇しないから、はなっから抜けてる。
必ずIfを使う縛りなら
>>388 がベストアンサー
ソートアルゴリズムの最初の1回目のループを展開してるだけなんだけど、基本中の基本のやり方
>>392 if文の使い方を聞かれてmin()関数を教えるような人はプログラムを仕事にしないで欲しいのです
いえ、仕事をしないで欲しいのです
仕様書はちゃんと読んで、条件は無視しちゃいけないよね
勉強のため何が何でもIfだけで解決しなきゃいけなかったのか、 まだ初心者だからMinという便利な物があることを知らなかったのか それによって変わってきちゃうからー
>>395 仕様書ならそれが正解
しかし案件定義なら顧客が何をしたいかを読み取ってより良い方法を提案することも必要
そもそも
>>370 にはIf使えとは書いてないし
>>394 分かってねえなあ。
勉強を教える仕事じゃないならユーザーにとって一番使いやすいとか、速度が速いとか、ユーザーが満足するようなものかどうかが大事なのであって、どんなコードじゃなければならないとかの要望は普通無い。
そして、メンテナンス性とかコードの書き方に関してもMinの方が良いとなればそもそもの問い掛け自体仕事で発生することは無い。
そして実際には、何でMinじゃ駄目なのと問い掛けられない奴は仕事の出来ない奴ということになる。
(もちろん明確に理由が有るならIfで書く。)
指示通りにしか作れない奴じゃ単なるコーダって奴になるしかない。
仕事ではMinを使わないなら明確な理由が存在するし、打ち合わせなんかのやり取りで既に意思統一されてる筈だ。
つまり今回の問い掛けのような事態は存在しない。
>>393 だな、簡素で分かりやすく奇麗なコードだ
>>398 なんか仕事をしてる体で話してますけど
あなたの想像上の仕事では自分にとって都合の悪い事態は存在しないのですね
さぞかし楽しかろうとは思いますが
あなたは社会に出ないでください
>>400 仕事をしたことの無い奴には分かるまいw
再利用したいけどExcelの話をしたいときに困るのかな
「Excelの話」したいんだったら総合相談所でやれ
早速質問 今vbaでマップ使って とある表の集計を行なっております 一つのkeyに対しアイテムが複数あるので 配列で入れようと思ったのですがうまくいきません 何か良い方法はありませんか?
>>408 一つのキーに対して複数のアイテムがある
これをどうにかこうにか出来ないか
やりたいことは
キーが重複された二次元配列を
グループ化&合計を取りたい
>>409 エクセルならピボットテーブルでいいんじゃない?
エスパーじゃないんだから、もっと具体的に説明しないと、何がしたくて何ができないのか判んないよ。 そして多分だけど普通にifで分岐するプログラムを書くだけだと思う。
いや多分forでループするプログラムを書くだけだと思う
データシート キー 金額a 金額b 1 10 20 2 20 50 1 30 90 結果(期待) キー 金額a 金額b 1 40 110 2 20 50 上のような感じのシートがあって 集計かけたり 平均とったり 最大値だったりしたい
>>415 そのくらいの事を自分でできないなら
ピボット使った方がいいと思うぞ
バグって計算結果が合わないから
そのくらいの事を自分でできないから質問してんだろ そのくらいの事を理解できないなら質問スレに来ない方がいいのに
そのくらいの事も判らない人にも実現できる方法を提案してるだろ
上のように各列の情報に応じて、一定の条件にヒットしたら評価欄に追記、ということをしているのですが、
上手い書き方が思いつかず、冗長で読みにくいコードになってしまいます
どうすれば綺麗で読みやすいコードになるでしょうか?
特に、変数(ここでは「評価」)の参照先のセルに書き込みつつ、変数の値自体も更新するスマートな方法と
If文で2つの条件が当てはまった場合に両方の処理を実行させる(ここでは40点以下と60点未満のIf文を一つで済ませるとか)方法があれば知りたいです
>>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を並べる今の書き方で別に悪くない ありがとうございます、やってみます (コードは行数制限とインデントが反映されなかったのでつい画像に…すみません)
オートフィルの連続データでA1が0なら終わりでそれ以外なら下にオートフィルの連続データを追加して行くってどうやればいい?
下に一つオートフィルの連続データを追加してもしもその数が0以外ならばその下に一つづつ追加してもし0になったら終わるってことです オートフィルの連続データまでは成功しました!
>>424 何をやりたいのかさっぱりわからんから
> オートフィルの連続データまでは成功しました!
のコードを晒してくれ
何をどーしたいのかよーわからんが、 オートフィルの連続データが完成したならDo While Loopでも使えばいいんじゃね
そうですね連続データと探す作業分けてDo until使ってみたら目的は達成できました ありがとございます
漠然とした質問で申し訳ない コレクションというのがあるけど、その利点というかこういう場合に使うとかという のを教えてくれないだろうか。配列は動的配列も含めてよく使うけどコレクション というのはあるのは知ってるけどどういう場合に使うものなのか判らない。 (まぁそれでも何とかなってるということは今の時点ではそれでも問題ないって ことでもあるんだけど)
>>428 Dictinonaryだとキーが重複してたらエラーになるから
重複させたくない場合は便利だと思う
あと既にそのキーが登録してあるか調べるメソッドがあるから便利
配列でも実現出来るけど生産性の問題だと思う
>>428 Excelならコレクションは知らないうちに必ず使ってるから心配しなくてもいい
オブジェクトを複数まとめた物がコレクションで、例えばワークシートオブジェクトをまとめた物もコレクションの一種
新規ブックを作るとワークシートが3枚あるじゃろ?それがもう既にコレクションなんだわ
名前をよく見ると「Worksheets」って複数形になっとるじゃろ?これが「複数まとめた」コレクションを示しておるのじゃ
>>428 コレクションの便利さを実感できるのは、For Each 〜 Nextとか
広い意味では配列もコレクション 元質問のコレクションが何指してるか質問からは分からん
>>433 どの言語でもコレクションの定義は曖昧だからなあ。
配列のように物理的に連続したメモリ領域で動かせないものが配列。
気付かないうちにコレクションを使ってたってのは、あぁそうなのかって感じですけど >元質問のコレクションが何指してるか 思い浮かべてんのは連想配列とかディクショナリとかってやつですかね。 ディクショナリが重複チェックにも使えるってのは知りましたが。 今現在動かしているのをディクショナリに変えて見ようかなとと思ってます。 どちらにしろ自分で判らないことにはすすまんので。 後、曖昧模糊とした質問に答えてくれた皆さん、ありがとう
配列数の制御がめんどいし 個々のデータ型も合わせんでいいし
感覚的な話になるけど、例えばA列、B列、C列には○と×が入っててD列には何かの名前が入ってる時に、A、B、Cの組み合わせが×、○、○の時のD列の名前を表示したいとするわな。 こういう場合は一行ずつ見て行って×、○、○の組を探すわな。 こういう場合はFor Next使うわな。 つまり普通の配列が感覚に合う。 一方、A1:F100の範囲の各セルで1つだけ○、他は全て×の時に○のアドレスを知りたいなんて時には見つかるまで全てチェックすれば良いわけで、どう見ていくかなんて関係無いわな。 こういう場合はFor Each Next使うわな。 つまり連想配列が感覚に合う。
>>438 そんなもん普通はvlookup使うわな。
>>439 ばーか。
感覚を例として挙げてることが分からないバカは黙ってろ。
もっと上手い方法があるだろうことは最初から分かってる。
順番を意識しないIteratorの感覚を説明してる。
コレクションにだって順番は実際はある。
しかしそれを意識しないような場合にぴったりということだ。
他人の回答の批判とかするほうがおかしいね 質問に対して自分の考えで回答すればいいのに
適当に批判してやらなきゃお前ら好き勝手に質問と関係ない事ばかり言うじゃん 批判してくれる奴に感謝しろよw
質問と関係ないこと言ってもいいと思うけどなんでそれが駄目なのかな?
>>444 自分は質問と関係ない自分語りするけどそれを批判されるのは許せないってか?
どんだけワガママに育てられたんだお前は
ドカタ仕事の憂さ晴らしをここでやるのはやめてほしいと思うのです 汚い言葉を使うのは本人は無頼漢的にイケてるつもりかもしれないけど 側から見ると貧乏くさいのです
accessの条件付き書式について質問です。 FormatConditions.Add(acExpression,, の後の式は変数を展開してくれないでしょうか? また、関数の呼び出しも出来ないでしょうか? 例えばmonth関数は呼び出して戻り値が得られるのですが、自作関数だと呼び出せなくて困っています。
解決しました。関数使えますね。変数はまだ試していませんが、たぶんダメでしょうね。
Includeのようなことはできないでしょうか? 参照設定ではありません。 現在、ユーティリティ関数を集めたxlamファイルがあるのですが、中身が膨れ上がってきました。 機能単位でファイルを分割したいのですが、 そうすると今まで参照設定でutility.xlam1つで済んでいたのが、 utility_picture.xlam utility_text.xlam utility_workSheet.xlam ... と、いくつも参照しなくてはならなくなります。 utility_xxx.xlamをすべてインクルードした1つのファイルを作り、 それを参照すればすべて使える、というようにしたいのです。 こういうことはできるでしょうか。
>>451 ひとつのxlamがいくつの標準モジュール、クラスモジュールを持ってるの?
VBAでそんなに大きくなるイメージがいまいち湧かないんだが
なんでも詰めこめばいくらでも大きくなるだろw どんだけ貧困なイメージ力だよw
なんでも詰め込んで大きくなったならダイエットしろというアドバイスになるだろw
>>451 そういう運用は良いのかという問題がある。
それぞれのアドインがバッティングしないのなら、そもそもアドイン1つに纏めるべきじゃね?
カテゴリが別だからとか色々理由が有るんだろうけど、その理由がそのままいくつも参照すべきという理由になるだろ。
アドインを1つに纏めるべきかいくつも参照すべきのどちらかじゃね?
>>457 ・プロジェクトエクスプローラが縦に長くなりすぎて使いづらい。
・巨大なクラスになるとfacadeパターンを使って分割しているのですが、
その際に処理を委譲するクラス名にxxx_reader, xxx_outputter等つけています。
ファイルを分けられれば単にreader, outputterで済むのですっきりさせたい。
この辺が分けたい理由です。
触るのが久しぶりだったので忘れていたのですが、a→b→cで参照が連鎖している場合、
a→cの参照がないとaからcの関数を呼び出せないだけで、プログラム自体は動くんですね。
いくつも参照でやってみようと思います。
>>453 単一目的のマクロ(そのutilityを呼び出す側)はそれほど大きくならないのですが、
画像操作、データシート処理のラッパー、デバッグ機能など
汎用的に使える機能をutility一つにまとめて行ったら大きくなってしまいました。
この辺を別ファイルにしようと思っています。
どうせ使う時は全部必要なんだろw 無駄なことすんなw
使うときは割と全部必要ですが、細かく分かれていないと 機能追加やリファクタリングが面倒なんですよ。 モジュールをディレクトリ分けしてツリー構造にするような ことができれば一番いいんですが。
出来るかどうか知らんが 親のユーティリティで子を自動的に参照設定すればいいんじゃね たしか参照設定もVBAからいじれたはず
Private Sub Application_ItemSend(ByVal Item As Object, Cancel As Boolean)
Dim objMe As Recipient
Set objMe = Item.Recipients.Add("
[email protected] ")
objMe.Type = olBCC
objMe.Resolve
Set objMe = Nothing
End Sub
検索すると出てくるこのプログラムだと、
再送しようとした場合、BCCが複数追加されてしまいます
Outlookで自動的にBCCを設置するプログラムは調べたら乗っているのですが
BCCに既に設定したいアドレスがあった場合は追加処理をしないというプログラムを追加したいです
>>463 変数objMeを宣言している行の直前に以下の処理を追加
Item.BCCプロパティに設定されている文字列を取得して、その中にdomonなんたらっていうアドレスが含まれているかどうかをInStr関数で調べる
含まれていたらExit Sub
ありがとうございます 間違えてメールアドレスそのまま載せてしまいました やってしまった… もう一度頑張ってみます
VBAとPythonが併用できるのかな? 前例あるの?
python入る言うてもどのバージョンかとかライブラリかとかアップデートはするのかとか色々課題あるだろ
質問なのですが、別表の項目から他の表の項目(セルの位置)にデータを飛ばしたいんですが、できますか?
×ご教授 ○ご教示 あと、見も知らぬ他人にタダで教えてもらうんならそれ相応の作法は必要じゃないのって、端で見てて思う
>>472 もっと具体的にどんなのが作りたいか書いてもらわないと難しいです。
5列目を変更した時に同じシートの1列目を選択するようにしたい、とか。
あるいは、別のシートのA1セルを選択したいとか。
飛ばすといっても、そのタイミングが変更した時なのか、選択したときなのか、特定の数値が入ったときなのか。
こんな感じの表Aがあって、似たような表Bが別シートにあるんですけど、
表Aのセルの色を付けると同時にB表のセルのイロを変える
または、セルの文字も一緒に持ってくる
できますか?
できるけど、コード教えてもらって、それを標準モジュールなり、sheet1モジュールなりに書き写せます? それを使いやすいように改良できます?
できるって書いたけど、色を変えるのをイベントにするのは無理だから、マクロをボタンに登録するか、何かほかのイベントに割り当てるかしないとダメだわ。
>>482 お忙しいのにみなさんありがとうございます
ちょっと詳しく説明すると、こんな感じです
左のsheetの表は一項目につき3段、その3段目の情報で仮にA,Bが記載されてある色つきのセルの情報のみを抜き出し、右にある別sheetの表に反映させたいのです
分かりづらかったらすいません
どのように組めば行けるのか、詳しく教えて頂くとありがたいです
おわび 御貴兄たち、何卒添削お願いします。変数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
これ色付き以外のセルにも文字列は入ってるんだよな?
あー〜スマン >表Aのセルの色を付けると同時にB表のセルのイロを変える この仕様を見逃してたわ 見なかったことにしてくれ
>>487 入ってます
欲しいデータは1色で統一されてますが
ちなみに他に文字が存在しており、それらはほかの色で存在しています
>>488 お手数お掛けしております
ほんとにありがとうございます
色で判断をなくして、(条件で変えるので)
>>483 に書いてある欲しいデータ4種類を転記させるものでも良いのですが、難しいでょうか
パソコンで見たら見えた。 これ、変更したところだけ反映したいの? それとも、元表の3行目全てを反映したいの? というか、データだけなら=で結べばいいのでは?
>>491 そこまでして見ていただいて申し訳ないです
三段目だけを反映させたいのですが、その手書きの表の列、行ともに結構長い表なのです
手っ取り早く一瞬で作れたらと思って質問した次第です
Excel VBAスレいけば寄ってたかってみんなで教えまくってくれんじゃね?行けば?
>>493 いまはゴキブリが湧いてるからあっちは行かない方が良さそう
>>492 結構長いというけど、どれくらい?
数十列数十行くらいで、1回だけなら右にオートフィルして、行ごとコピペするのが早いと思う。
=で繋ぐだけなら1回やっておけば、あとは自動でかわる。
マクロでやるとしても、数式で=を入れればいいのか、値を持ってくるようにした方がいいのか。
表の範囲指定はどうするか?
current.regionか、usedrangeか、直接指定するか。(元の表に罫線が引いてあるか、空欄があるかで変わってくる)
数式だって絶対参照、相対参照をきちんと意識して書けばRange=数式でアドレスに併せて変えてくれるから1回の代入で終わる。 以外と知らずに1セルずつ代入する人もいるけど。
>>495 3段目に毎回同じ文字がくるとは限らず、最低3種類の文字がくるので、とりあえずif分使って作成しました
横に日数1年分、縦に各項目50程です
絵にある通り、全く同じ表をコピペして使いますが(線あり)、ほんとは転記先の表は1段で済ませたい所でした
日替わりで最低3種類のうちのひとつが返ってきたらいいので
わかりづらくてすいません
>>496 そうなんです
やり方を知らないので今は1セルずつ代入しています
>>498 fast-uploader.com/file/7072682105190/
目的のものと全然違うかもしれないけど作ってみました。
データの最初のセルだけは自分で指定してください。
>>499 乙です
老婆心ながらアップする前に「ブックの検査−ドキュメント検査」したほうがよろしいかと。
>>499 見れないのですが、消されたのでしょうか
>>498 やり方も何も、例えばA1からA列に1、2、3、・・・と入力されてるとしてRange("B1:B10").Value="=A1"を動かしてみな。
全部A1を参照したいならRange("B1:B10").Value="=$A$1"とする。
本当はValueではなくてFormulaだけどValueでもちゃんと相対参照してくれる。
fast-uploader.com/file/7072704922415/ パス 0128
>>504 >>505 みなさん、無知ですみません
ほんとに助かります
ありがとうございます
>>505 ひとまずダウンロード致しましたので明日内容を確認します
お時間割いて作っていただいて、ただただ感謝です
おやすみなさい
下から5行くらいにtext ってあるの、valueに直した方がいいかも。 textでも問題ないかもしれないけど。
おはようございます 昨日ダウンロードさせてもらったファイル開かないのですが、どうやったら開きますか?
エクセルのバージョンは? 当方2013で開けましたよ。
>>509 2010です
すいません、どうやって開きました?
プログラマですがvbaの初心者です。 C,java,lisp,python 基本的な言語とその意味論はだいたい知ってます。 vbaで書籍を探すと、大抵業務問題の解決という文脈で本が書かれているようですが 純粋に言語的な機能を抽出した言語仕様、あるいはリファレンスに相当するものを求めています。 そのような書籍のうちもっとも簡潔に記述されているような本はないでしょうか?
>>511 本職のPGならマイクロソフトのディベロッパーセンターの英語版リファレンスを直に読んだ方が良い
あと、場合によってはVBAとほぼ同じシンタックスになってるVB.NET用のMicrosoft.Office.Interopクラス以下の各アプリケーションのオブジェクトのリファレンスの方が役に立つこともある
VLOOKUP関数の応用で、2列のリストがあり、検索セルではどちらかを入力するともう片方が入力されるものをVBAで作りたいのですが、、、
>>514 左をキーにしてvlookup 、次に左をキーにしてvlookup すれば良いんじゃないか?
右と左に同じ内容が存在するとダメだけど。
グラフを作成するときに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)みたいに扱いたいのですがどうしたらいいでしょうか
特定のフォルダ内のすべてのブックにC列に複数存在する特定の文字列『a』のすべてに対して右隣のセルに文字列『aa』を入力して、さらに同じシート内でC列に複数存在する特定の文字列『b』のすべてに対して右隣のセルに文字列『bb』を入力するようにしたいのですがどのような感じになりますでしょうか?
☆ 日本の、改憲を行いましょう。現在、衆議員と参議院の 両院で、改憲議員が3分の2を超えております。 『憲法改正国民投票法』、でググってみてください。国会の発議は すでに可能です。平和は勝ち取るものです。お願い致します。☆☆
vbacでmdbファイルをcombineしていると、「このアクションを実行するとプロジェクトがリセットされます。実行しますか?」というダイアローグが出てくるのですが、回避策をご存じの方いますか?
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 基礎的な質問で恐縮ですが、ご解説いただければ幸いです。 よろしくお願いします。
>>522 0も1回と数えるから、i が0の時に1回、1の時に1回、合計で2回です
For i = 1 To tmp
にすれば1回になるよ
>>523 解説頂きましてありがとうございます。
0も1と数えるのはややこしいですね。。
しっかり復習します。
配列は0スタートとか知っておいたほうが良い(VBAの場合はOption Baseで切り替えられるけど)
>>524 理屈で覚えればややこしくはないぞ。
配列の添字は距離のようなもので、「当該配列の1個目の要素のポインタを起点としたときに、そのポインタにどれだけ(何回)加算した場所に、その要素の格納されているメモリが存在するか」を示す数字。
1個目の要素から1個目の要素に移動するための加算回数=距離は0だから、1個目の要素にアクセスするときの添字は0になる。
>>514 if文でセルの指定範囲の時実行で1列目の時と2列目の時で分けたらどうですか?
>>525 0スタートどころか-100スタートとかも可能
こればかりはプログラマーを混乱させるために導入されたとしか思えない謎仕様
>>531 配列添字の範囲指定なんてPascalの時代からあるのにバカって悲しいな w
>>529 C#だとint[] intArray = new int[2]で要素は[0] と[1]になるんだが、
vbaだとdim Array(2) as Longが0,1,2の三つになるからたまにコンパイルエラーで悩む。Collectionは一から始まるが
Dictionaryは0からというのもたまに嵌る。
>>534 > vbaだとdim Array(2) as Longが0,1,2の三つになるからたまにコンパイルエラーで悩む。
0,1,2になるか1,2になるかはOption Baseによる
コンパイルエラーは意味わからんが
>>533 お前が黙っとけよ w
ExcelのCellsの添え字が1オリジンだからデフォルトで使うしかない
>>535 cell番地が1から始まるからbaseも1じゃなきゃ書けないバカはレス禁止
Cellsはコレクションオブジェクトを返すプロパティ関数だから、インデクサが1オリジンなのは文法上当たり前
>>540 配列の話してんだよバカチョン黙ってろや
>>539 誰にレスしてんだよ、ボケ w
>>540 アホすぎ、そんなもん仕様によるだろ
Excelが開発された当初はまだ0の発見前だったからだろ。 今作るなら0から始まるようになる。
こんばんは! おしえてください! VBAでフリーフォームを書いたり、既にあるフリーフォームの頂点編集をしようとしています。 書く方は上手くいって、Shapes.BuildFreeformに、AddNodesコマンドで10点頂点を追加して、 楕円を書きました。 続いて、頂点の編集を行うべく、書かれたshapeのnodesや、Verticesで頂点情報を取得したら、 なぜか30点あります。ベジェ曲線で描かれた頂点の座標はもう残っていないのでしょうか??
こんにちは。 VBA初心者です。 Excelで知恵袋のような社内用のQ&Aを作成中です。 質問フォームに入力すると質問が縦に書き込まれていくところまで作りました。 しかし回答を質問に対応させることができません。 回答は対象の質問の横に入力されていくように作りたいですが、どうしたらよろしいでしょうか。 教えて下さい。 分かりづらいかもしれませんが、下記のように作りたいです。 質問1 回答1 回答2 回答3… 質問2 回答2-1 回答2-2… 質問3
シートを別にする 質問ごとにIDを振って回答にその質問IDを保持させる
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
ExcelVBAの質問です adodbStreamを使って、jisコード(ISO-2022-JP)で書かれたテキストファイルを読み込んで色々するマクロを作っています 対象のテキストは1行120バイトのレコードが何行も含まれるという体裁になっているファイルです このファイルを入力ファイルに指定したところ、なぜか3行目のみ最初の12バイト分が読み込まれません レコードの内容を変えて何度か試してみたのですが、決まって3行目のみ行頭の12バイトが抜け落ちてしまいます adodbを使う際に何か必要なことがあるのでしょうか?
Webにあるスクリプト入れても動いたり動かなかったり 厳しいね、これは。
ファミコンゲームを再現したいんですが、単純な構造のゲームってありますか?
シート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
>>556 Resizeで貼り付ける範囲を広げてあげる
幅を9セルにしたいならResize(, 9)って付け足す
僕の知り合いの知り合いができたパソコン一台でお金持ちになれるやり方 役に立つかもしれません グーグルで検索するといいかも『ネットで稼ぐ方法 モニアレフヌノ』 HCSP8
シートにボタンがいくつかあって、押したときの処理が結構複雑なんです とりあえずclickedをシートモジュールに書いて、そこから呼び出される関数も全部シートモジュールに書いたら分量がすごいことになりました やっぱりクリック検出だけにしぼって残りは全部標準モジュールにすべきなんですかね。そのシートでしか呼び出されないわけで分けるのも分かりにくいような気もして
>>563 Excel2003までのツールバーにメニュー追加するコードを書くと2007以降ではリボンにメニューが追加されるけど違う話かな?
Access2016でコンボボックスの規定値をnullから1へ変更したくて フォーム!コンボボックス.DefaultValue = """1"""とするフォーム上は1と表示されるんだが、プロパティーシート上は全く変化なくて、フォームをとじてから開くと規定値が変わっていなくてNullのまま。 VBAからは既定値の変更が出来ないのかな?
フォームを閉じるときに変更を保存しなけりゃ普通に考えてもとに戻るわけだが
ここはjscriptはアカンけ?outlookをjsで弄りたいんだが
Wordで読みとり専用推奨で保存されてるファイルをVBAで書き込み可で開いて編集して上書き保存したいんですが、やる方法はありますか?
マジだったカオスと思ったが 開くと読み取り専用か聞いてくるのか まあ、OS側でなくワード側で制御してそうだから、回避は厳しそうな気がする
カオス言いたい年頃なのでどうか大目に見てやって下さい
カオスは天地が分かれる前の状態 あるいは光と闇が分かれる前の状態
>>576 VBAを使わずにファイルを開いてダイアログのウィンドウをつかまえて「いいえ」ボタンにメッセージを送るという力技ぐらいしか方法はないんでしょうか?
Excelでは開くときにIgnoreReadOnlyRecommenedというのを指定すれば良さそうなんですが
document.openメソッドにも引数readonly があるみたいだけど
>>581 ReadOnlyにFalseを渡しても読みとり専用で開かれるのは確認済みです
>>574 ありません。
Wordは手動でやるしかない。
Excelとは違いますから。
>>580 VBAでもその力業で出来るけどね。
でも読み取り専用推奨で保存する目的はそのメッセージを出すことにあると思うからそれをスキップするコードを書くべきかという問題もある。
>>582 すくなくともうちの環境では、ReadOnly:=Falseで書き込み可能で開いてるけど?
その状態からReadOnlyRecommended = Falseにして保存したら、読み取り専用推奨は外れてるが
まあうちの環境がかなり古いから最近では出来ない可能性もあるが
それホントに推奨なだけなのか?
>>586 じゃあ2010から出来なくなったんだな
うちの2007ではできてるから
ただそこの文書
Note The following example applies to Word 2003 and 2002:
とか書いてあるな
Last Updated: Apr 19, 2018
らしいけど、適用対象バージョンがよくわからんな
ACCESSでオートルックアップクエリを使用したフォームでマスタにないものを入力した際、 フィールドとキーが一致しているレコードをテーブルで探すことができません。 と出ますが、マスタにないデータを入力しようとしたとき、上のメッセージを出すことなく、マスタ登録用フォームを呼び出すにはどうすればよいでしょうか?教えていただけると助かります。
スパークラインをVBAで挿入したいんだけど範囲指定のところがうまくいきません。 わかる方いたら教えてください。よろしくお願いします。 call cells(10 , h ).SparklineGroups.Add(xlSparkLine, "n5: n100") "n5: n100" のところなのですが、 range(worksheets(h).cells(14,5) , worksheets(h).cells(14 , G )) のようにして ワークシートごとの数値群をスパークラインにしていきたいのですが、、、 何か良い方法を教えてください。 よろしくお願いします。
質問 Outlook2010なのですが 受信トレイの検索(Ctrl+E)で「請求書」を検索するのと同じ動作を VBAにしたいのですがどのように記述すればいいのでしょうか ボタンに登録して使うつもりです。 OutlookVBAを使うのは初めてでしてお手引きをお願いいたします
VBAで質問です 【前提】 ・デスクトップにフォルダA ・フォルダAの中に9月1日分のExcelファイル"0901"とマクロ作動用の.xlsmファイル 【したいこと】 ・フォルダAの中に9月2日分のフォルダ"0902"を作成 ・"0901"を開き、B2セルの2018/9/1を2018/9/2に書き換え ・フォルダ"0902"内にファイル名を"0902"にして保存 日毎のレポートのひな形を作ろうとしています あまり知らないながら書いてるのですがエラー出まくりで泣きそうです
>>590 Application.Searchメソッド、もしくは
Application.Session.GetDefaultFolder(olFolderInbox).GetTable(DASLクエリの引数) を使えば良いのでは
>>591 悪いこと言わないから、手でやるか詳しい人に頼みなさい
複数のブックが同時に開かれている状態でのVBA処理には
いろいろ面倒なところがあり、経験が必要
5ちゃんでサクっと説明できるものではない
しかもフォルダ処理も伴っているので、エラー処理を含め
きっちり作ろうとするとけっこうな規模のアプリになってしまうと思う
>>591 thisworkbook.path\フォルダA\0901を開いてあとはブック名から指定して必要事項を書き換え。
ブック名を指定してsaveAsで
thisworkbook.path\フォルダA\0902で保存。
蛇足だが、必要無くともブックもシートも常に指定した方が良い。
>>591 とりあえず作ったコードを晒せば色々添削してもらえるかと
>>593 回答できないなら黙ってなよ
おそらくやりたいことはこんな感じだろう。 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
>>592 Application.AdvancedSearchして
Searchオブジェクトを検索フォルダーにSaveするっていうことですかね
単純にVBAでCrtl+Eのクイックサーチ(?)する方法があればと思ったのですが
無理っぽいですね
ありがとうございました
初歩的な質問でごめんなさい うまくできません If IsNumeric(myN) Then Range("A1").Value=Range("A1").Value + myN End If myNが1の時と2の時があるとしてセルA1の値を3にしたいのですが やってみると12っていう風に数字が並んでいってしまいます どうしたらいいでしょうか
>>599 もしmyNがString型、あるいはObject型に文字列データが入っている場合は数値型に変換する必要がある
Range("A1").Value = Val(Range("A1").Value) + Val(myN)
でいいんじゃないかな
>>600 String型になっていました
参考にしてもっと勉強します
お付き合いくださりありがとうございました
超初心者です。
Googleの検索窓に「VBA」と入力する サンプルコード
(
https://vba-code.net/ie/set-value-to-textbox/ ) を実行してみましたが、
objIE.document.getElementById("gbqfq").Value = "VBA"のところで
「実行時エラー 424 オブジェクトが必要です。」となって動きません。
「標準モジュールに以下のコードを追加して」の意味が分からないので、
標準モジュールをどう書いたらよいのか、どこに追加したらよいのかわからず
サンプルコードのみを実行しました。
どなたか親切な方、対応方法を教えてください。
難しいことはわからないので具体的にコードを書いてもらえると嬉しいです。
よろしくお願いいたします。
>>602 >>objIE.document.getElementById("gbqfq").Value = "VBA"
objIE.Document.getElementById("lst-ib").Value = "VBA"
>>603 ありがとうございます!
できました!!!
なんか分からないけど動いて嬉しいです!
頑張ります。
>>604 おう頑張れ!わからんかったらまたいつでも聞いてくれな!
>>605 ありがとうございます!
同じことを別のホームページでしたくて、
URLと入力するところを変えてみたのですが、
実行時エラー438 オブジェクトはこのプロパティまたはメソッドをサポートしていませんとなって動きません。
ホームページは
https://www2.smile-etc.jp/NASApp/etcmlg/MlgReq ;jsessionid=0001kXELRCuGax2mjI7VtXa12rz:15fqn57ku?gvlddpef=1011100000&mdwsetmb=1011120000の画面でしたくて、
入力するところは
objIE.document.getElementsByName("Name1Kana").Value = "マイレージ"としてみました。
お時間あるときでよいので出来たらお願いします。
仕事で毎日同じような入力ばかりしていて自動化できるところをできたらいいなと思っているのですが、超初心者にはハードルが高くて難しいです 涙
'
getElementById("gbqfq") getElementById("lst-ib") 君は、この違いがわからないの? HTML, DOM, CSS, JavaScript とか知らないの? VBA には関係ないのだけど。 全言語・プログラミングに共通の話題なんだが
HTML に書いてある、ID だよ ウェブページは、HTML(DOM), CSS, JavaScript で出来ている。 ブラウザでF12 を押すと、開発者ツールが起動するだろ これらを知らないと、ウェブ開発はできない! VBA とは、全く関係ない
>>609 >>609 知識もないのに場違いな質問をしてしまいすみませんでした。ご親切にありがとうございました。
>>606 自己解決して、自動入力マクロができました!ありがとうございました。
VBAでできることはC#でもやることはできますか?
それにしても、なんで、マクロはFunctionしかcall出来ないんだろうね。 無駄にFunctionを作らないようにと英語の本には書いてある。Subで済むもをFunctionにするなと書いてある。 なのに、マクロの仕様のために、無駄にFunctionをつくったり、SubをcallするだけのFunctionを作ったりしないといけないのは間抜けな仕様だと思うがどうだろうか?
>>614 それもC#で可能
>>615 ちょっと何言ってるかわかんないですね
>>616 マクロからSubをCallできないのは知ってますか?
>>617 知らないです
私の知ってるマクロだとsubもcallできるので
>>616 本当に?
ワークシートからDLL関数をCallするためのインターフェースだけはVBAネイティブのFunctionとして書かなきゃいけないと思ってた
ワークシートから直接C#ソースの関数をCall出来るってこと?
>>615 SubもCall出来る
というかSubは本来Subroutineのことを指すのでそもそもCallできなきゃおかしい
あれ?エクセルは出来るの? アクセスは駄目なんだよ
VBAしか使わない人間は、WinAPI使わない人間はSubしかCallしない。
なんでAccessはマクロからSubを呼び出せない仕様なんだろうか?
ほんとに?MSのサイトに対処方法が書いてあったけどなあ。 仕事で使ってたmdbでエラー出まくってSubをFunctionに書き換えた記憶があるけどなあ
意味が分からん。 ExcelだろうがAccessだろうが当たり前にできる。 やり方間違えてるだけだろ。 lngRet = FuncA("何かの引数") Call SubA("何かの引数", "何かの引数2") これはできる。 SubでCallを省いた場合に SubA("何かの引数1", "何かの引数2") とするのは出来ない。 Callを省く場合は SubA "何かの引数1", "何かの引数2" とする。
>>627 AccessとExceの用語の違いが問題かもしれません。
Accessだとマクロのデザインビューで新しいアクションの実行→プロシジャーの実行を選択→プロシジャー名を指定という流れです。
ここでSubを入れるとエラーになり、Functionを入れると実行されます。
全く同じ動作でもSubだとエラーでFunctionだと実行されるという謎仕様のことです。
>>628 Accessマクロの「プロシージャの実行」機能は、Functionプロシージャに限ってアプリ経由でコールバックさせることができるっていう一種のリフレクション機能だから、仕様上Subプロシージャを呼べないのは当たり前
でも普通はVBAその他一般のプログラミング言語の話題でCallするとかコードを呼び出すとか言う場合、プログラムのコード中で他のプロシージャ(=メソッド)を呼び出すこと一般を指す
AccessだろうがCallステートメントでSubを呼べないわけがない
全然話してる内容が違う
MSの提示する対処方法
https://docs.microsoft.com/ja-jp/office/client-developer/access/desktop-database-reference/runcode-macro-action から抜粋
>>[!ヒント] Visual Basic で記述した Sub プロシージャまたはイベント プロシージャを実行するには、Sub プロシージャまたはイベント プロシージャを呼び出す Function プロシージャを作成します。
>>その後、 RunCode アクションを使用して、Function プロシージャを実行します。
>>630 そうなんですか?Callという言葉の使い方が悪かったのですね。
Accessのマクロのプロシジャーの実行からSubを実行できないという表現が適切なんですね。
それにしても謎仕様ですね。いちいちCall_SubみたいなFunctionを作らないといけないなんて馬鹿らしいですよね。
Subを使うのを止めて戻り値を使わないのになんでもかんでもFunctionにしている人がいるのはこのあたりにも原因があるのでしょうかね。。。
C#やJavaなどの言語にはfunction相当の構文しか存在しないから、それに合わせてるだけかも
サブルーチンというものは、マクロ上での繰り返し処理や重複処理が必要な場合に同じコードを何度も記載することを回避して、プログラムの再利用性と簡潔性とメンテナンス性を高めるためのもので一種の共通部品で呼び出して使えるためとても便利。 その代わり呼び出し側のコードが必ず必要。
たとえ1回しか使わなくても、機能ごとに分けて名前を付けることでコードの見通しを良くするという目的もある
・Accessのマクロの「プロシージャの実行」機能は要するに「関数を実行する」ことに重きを置いている機能なので、関数ではないSubプロシージャは呼び出せない。 ・「呼び出す」と「Callする」は意味が(あるいは受け取り方が)違うので下手に知ったかぶりしないこと。
>>638 関数という言葉の定義次第ではSub Procedureも関数の一種になるぞ
あと、Accessマクロの実行機能に関する話題でマクロピッカーからプロシージャを直接選択して実行する操作を指して「呼び出す」とか「Callする」と表現する例は比較的稀だと思うぞ
数学的な定義だと関数は一対一の写像だから戻り値がないものは関数ではなくなってしまう 丸投げアウトソーシングとでも言えばいいのか
>>641 その理屈だと、Function Procedureが戻り値なしの記述を許容していること、戻り値と全く論理的な二項関係がない処理をFunction Procedureの中に書けてしまうことを考えた場合、Function Procedureが果たして関数と言えるのかどうかということの方が怪しくなる
それはプロパティとメソッドについても言えるわけで。 意味合いから使い分ければ良い。 Accessの仕事してるけどいわゆるAccessのマクロ機能は嫌いなので殆ど触ったことないな。
>>640 マクロからVBAプロシジャを実行するのを、呼び出すと言うのはすごく一般的だとおもうが
むしろ呼び出す以外にどう言うんだ
>>642 戻り値を指定しないFunctionだって戻り値はちゃんとあるんだが
まあそもそもプログラミング上でいう関数は数学的定義の関数ではないんだがな
>>643 一般的なプログラム用語としてはそうかもしれんが
VBAや旧VB,VB.NET,C#なんかはプロパティはメソッドとは別な構文で定義されてる
VBAの話するならちゃんと区別しれ
vba初心者でわからないところがあって質問したいんですけど、ここで大丈夫ですか?
ExcelとAccessは専門スレが別にあるけどな
学校の課題なんですがさっぱり分かりません
コードの入力?を教えてほしいです
>>647 その宿題をやるには「フォームの作成」という作業が必要で、それは文章だけの掲示板じゃとても説明できない
二次方程式 VBAのキーワードでぐぐればそれなりに情報はあるよ
>>648 フォームの作成ってこれですか?
ここしかわかんなかったです…
学校でExcelの課題出るのか 全員Excel入りのWindows機もってる前提なのか
なきゃ学校にあるPC使うだけやんけ 変な事気にする奴やな
>>653 商業科の電卓名人みないな奴は、もぅおらんのか
VBAで3つ数値があった時、最大値を表示させたい時
下記URLのNo.4の回答のelseifを使ったものがありますが、
elseifを使わずにelseだけで表示しようとすると、
どのようになるのでしょうか?
宜しくお願いします
https://oshiete.goo.ne.jp/qa/5352661.html 分かりづらそうなので追記で、下記のところです。 宜しくお願いします a = 10 b = 200 c = 30 Max = a If b > Max Then Max = b ElseIf c > Max Then Max = c End If
Max = a If b > Max Then Max = b Else If c > Max Then Max = c End If
>>658 ありがとうございます
試してみたいと思います
そもそも657では最大値求められないだろ。 なぜ他の2つと比較してから決めないのか
すいません、まだ初心者でまだ理解が追いついていなくて とりあえず最大値求めるにはこういう形...とかで覚えようとしてて....頑張ります
658でも最大値は求められない 試しに a = 1 b = 2 c = 3 で試してみるといい。Maxが2になってしまう Ifだけでやる場合の正解の一例 Max = a If b > Max Then Max = b If c > Max Then Max = c
>>661 If Elseの構文は、最初のIfの条件が成立したらElse以降は処理されずEnd Ifまで飛ばされる
つまり、
a = 1
b = 2
c = 3
だった場合、
b > Maxが成立したらc > Maxの部分は飛ばされてしまうからMaxは2のまま終わってしまう
elseやelseifは先行条件でTrueにならない場合にしか実施されない仕組みなことを理解しましょう
>>661 このレベルを形で覚えようとしている貴方にプログラミングは向いてない
ID変ったかも知れませんが
>>656 です
皆さんありがとうございます
>>665 手痛いレスですが、出来るところまで頑張ろうと思います。プログラマーではないですが基本は覚えないと連携し辛い位置の役職のため頑張ります。
本当のプログラミング初学者なら仕方ない。制御構文なんてどの言語も似てるので、1つ覚えれば次は勘が効くようになるよ、長い目でがんばりなされ
最大値を求めたいならWorkSheetFunction.MAX使えば良いんじゃね?
パニックを、5人がかりでやれば楽勝だろ、とか言ってるようなもの。
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 上手く情報を取得できないのでアドバイスお願いします。
>>675 wbに何も代入されてない。
AnotherSheetへの代入もこけるはず。
AnotherSheetが正しく生成されたとしても、その後使用されていないから何かとってこれるはずがない。
>>675 fullpass じゃなくて、fullpath ね。
>>675 行列指定が逆?
5行目を右方向に評価してくような感じになってるけど、新規に作ったシートが対象になってるから、一周もループしてないよね?
>>675 Cell値を取るときは、デフォルトにまかせずちゃんとプロパティ指定しよう。
>>675 バックで開いたつもりのブックに新規シート作っちゃってない?
ブックのフォーカスを制御するとか必要かも。
ID変わりましたが
>>675 です。
>>676 ‐
>>680 遅い時間帯でありながら見てくださって
ありがとうございます。
色々と不十分だったのですね。
指摘箇所を直したりして
また報告しようと思います。
>>675 最初に注意すべきなのは、いきなりRangeやCellsは絶対に使うべきじゃないってこと。
ちゃんと省略せずにWorkbookやWorksheetから書くようにする。
しかしそれだとコ―ドが長くなるのでそのために今回のコードのように変数で受けるかWith文を使う。
以下はスマホ上で書いてるんで動くかは不明です。
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
>>680 フォーカスを制御すべきじゃない。
いきなりRangeやCellsを使うから上手くいかないのであって、きちんとブックやシートから書けばフォーカスを制御しなければならないことは滅多に無い。
早速間違いだ。 fullPassと書いてる所が一ヶ所ある。 fullPathに直しておいてね。
>>684 まぁ、そうかもね。
でも最初はいろいろ試してもいいんじゃない?
>>682 ‐685
ありがとうございます
深夜のご指摘から
>>685 まで参考にしていて
現在デバッグしてますが、“カピバラ種類”のシートが上手く取得できていないようです。
ちなみに
'セルのB3てどこ?
'多分ボタンのあるシートかなと推測。
その通りです、分かりづらくてすいません。
改行制限のためいくつかコメントは掲示板に書き込むとき省いてしまいました。
'Range("A1").Selectって何の為に有るの?
ですが 、新シートのA1から書き込む為に書きましたが、デフォルトでA1から書き込むみたいですので
無駄なマクロでしたね。
少し言葉足らずでした。 iのカウント(空白行までループ)は上手く出来ているので、現マクロ有効ブックの新シートに取得情報を 書き込めていないようです。
>>688 うん?
Do〜Loopの中はiのカウントアップしてるだけなので、あなたが省略した(と勝手に思ってるんだけど)コードが動いていないということ?
念のためにいうと、元々のコードには情報を取得するコードが全く無いからこのコードだけじゃ取り込めないのは当たり前だよね。
すいません、 不覚に気づき、 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 にして上手くいきました、ありがとうございます。
細かい修正として j = i i = i + 1 の部分も i = i + 1 j = i - ○ のようにして、 無駄にできてしまう空白もなくしました。 お付き合いしてくださった方、 ありがとうございました。
質問です ワークシート上にすでに引かれている複雑な枠線をコードとしてどうにか変換というか取得できる方法はないでしょうか…
>>693 返事ありがとうございます
すみません、私の頭では理解できません…よかったらもう少し詳しく教えてもらえませんか
>>694 罫線を描く動作は理解できてる?
マクロ記録で簡単に調べられますよ。
例えば、2行2列選んで、縦横斜め全てに実線入れて
記録されたものを見ればどのような構造で描かれているのか
分かります。
記録の際は、xl〜の定数でよいですが、取得の際は数値で
返ってくるので注意。
調べたければオブジェクトブラウザで調べてもよいですが、
イミディエイトで、?xlThin みたいに簡単に確認する方法も
あります。
でも、取得して使うなら数値のままでもOKです。
ここまではOK?
>>695 >>696 会社でとある先人の作ったエクセルのフォーマットがあるのですが、それを使って作業するおばあちゃんが度々壊してしまうのです
セル結合やセルの幅など複雑になっている物なので、壊してしまったパソコンの不得意なおばあちゃんはいつも四苦八苦していて、どうにか入力された数値以外の罫線や列幅などだけボタン1つ簡単に戻せるものを作ってあげたいと考えています
頂いたヒントを元にもう少し頑張ってみます
結局わからなければまた質問させてください
ありがとうございました
>>697 シートの保護じゃダメなの?
おばあちゃんには特定セルに数値入力させてるだけなんでしょ?
>>697 シート保護で十分みたいですね。
もし何らかの理由で保護できないのであれば、
同フォーマットの隠しシートから書式貼り付けした方が早そう。
セル結合もあるし、1セルずつ罫線情報取得とか効率悪すぎ。
>>698 >>699 それがわかりながらあらゆる所(不規則)を動かさないといけない時があったりで、保護だと都合が悪かったんです
フォーマット自体を大幅に変更できればもっと色々と簡単にできるのですが、それも他のおばあちゃんたちが前の方が良かった〜なんて必ず言うので見た目を崩すことはできません
担当のおばあちゃんorおばさんが変われば書式貼り付けのための範囲選択も上手くできないだろうから(全選択など知りません)また誰かが黙って長時間四苦八苦する事になってしまいます
無駄にすべて最初からやろうとしたりも平気であります
平均年齢49才の職場なので仕方ないんです
誰にも聞かずに戻したい部分を戻せるような、とーーってもわかりやすい説明付きのボタンをユーザーフォーム上にでもいくつか作ってあげたいと思っています
崩してしまうパターンはだいたい把握できているので、それが最善かなと…
>>700 いや、だから隠しシートから自動的に書式修復をかければという意味で言うたのですが、、
トリガーはファイルオープンでも、ボタンでも。
試しにやってみたけど、罫線やセル結合は問題なく修復できるみたい。
入力規則とかは引き継げないみたいなので別にケアする必要があるかも。
行挿入、列挿入とかされて座標がかわるようなことされないならこれで十分では?
自分がよくやるのは、表のエリア毎に範囲名をつけて、そのエリア単位で最初に表組みした
ときと同じ要領で表作成を記録していき、コードを整理して修復マクロにします。
これなら起点となるセルが壊されなければ行挿入、列挿入にもある程度柔軟に対応
できるし、式や入力規則の修復も追加できる。
まぁ、利用者は作成者の想定を軽く超えてきますけどね。
>>701 理解力なくてすみません、、、
そしてありがとうございます
そのやり方を取り入れてとりあえず一度作ってみます!
ディム a アズ インテジャー コンスト b アズ バリアント = ファルス この読み方はあってますか?
マジか! 自信なくなってきたわ。 フォー イーチ 〇 イン、スターコンブ、ブイビーナロウ、コンカット、 ナンバーフォーマットローカル、ドゥ ホワイル、イズナメリック、 デカー ファンクション セットウインドウロング リブ "ユーザー32" エリアス、 バイバル 〇 アズ ブーラン、アプリケーション.ハウンド、オプション エクスプリシト。
numeric ニューメリック alias エイリアス boolean ブーリアン
>>709 >>707 が言う通りDeclareじゃね?
declare デクレア(デクレアー)
発音記号を見るとディクレィアーなんだけど、音声ではディよりデに近く聞こえる
https://en.hatsuon.info/word/declare パワポでExcelのVBAにある Application.OnUndo みたいなことって出来ない?
Application.CommandBars.ExecuteMso "Undo"
>>716 そっちだね
あるいはパワポの内部変数(たとえば図形のRGB値とか)の変化を検知してイベント上げるとかでもいいんだけども
質問スレでいつも思うんだけど、どんな状況でそれが必要なの? Excelで出来るんなら、逆にExcelをパワポっぽく見せるという手もあるんじゃないの?
勉強もかねてパワポのアドイン作ってるのよ だからExcelじゃなくてパワポで出来なきゃ意味がない その機能自体が必須で欲しい訳ではないから出来ないなら出来ないで諦める
何か斬新な使い方って無い? ワードでファミコンみたいな。
Functionで値を返すのと、ByRefで返すの、どう使い分けたらいいのか、わからなくなってきた。 どっちでも返せる状況なら、どっちがいい?
他人とか将来の自分が読みやすいようにFunctionで
Function一択 ByRefは古い書き方で互換性のために残してる これから作るプログラムには使うべきじゃない
>>721 どちらでもいい状況ならFunctionの方が使い易いのでFunctionにした方がいい
あと
>>724 はアホだからスルーで
ByRefが互換性維持のために存在するという話は聞いたことがないぞ
sortのcustomorderって、セル値を入れられたりはするのでしょうか? 複数のセル値を優先順位としてデータを並び替えるマクロを作成したのですが動作が遅いので改善出来ればと考えています。(forとifで判定する手法をとっています) よろしくお願いします
標準のソート機能で出来ないことでもやるの? 駄目ならSQL使うとか。
さて、名前付き範囲ってVBA@Excelで使えないんだろうか。 もし使えたとして、実行時間はどうなのだろうか。 色々と謎が多い。
>>732 それ使うと後でエラー見つけるのめんんどくさくなる
>>732 使えるよ
Application.Namesでコレクション取得して名前つき範囲にアクセスできるし、シートのRangeプロパティの引数ラベルとして名前をそのまま使ってセル取得できる
名前をキーにして名前付き範囲にアクセスするときはリスト形式になってるNamesコレクションの要素に対して正規表現か何かで逐次マッチ検索してるはずだから、名前付き範囲が増えれば増えるほどアクセスが遅くなる
なんで正規表現? 完全一致でいいじゃろ? SortedListなら量に正比例して増えることはない
>>737 > 正規表現か何かで逐次マッチ検索してるはずだから
なんだその意味不明な思い込みはw
普通に考えてハッシュなりB-Treeなり使ってるだろ
そもそも逐次検索だとしても遅さが気になるほど大量の名前付き範囲使う時点でなにか間違ってると思う
会社でブラウザの検索結果のページで いっぱいURLのリンク先が表示されるのですが そのたくさんのURLのそれぞれを開いたページ(毎回違うけど50ページくらいある)のデータを取得するVBAのコードを考えています。 IEの定番のCreateObject("InternetExplorer.Application")とDOMツリーの方法で実現できてはいるのですが 1つ1つページを開いて取得して閉じる、という作業がネットワークの遅さで異常に時間がかかります。 この複数のページを同時で取得する方法ってないでしょうか?よく知らないけどJavaでいうスレッドみたいな?
>>741 VBAはマルチスレッド非対応だから無理
>>741 VBAでマルチスレッドは基本的に出来ないと考えるべき。
物凄く不安定だし、Excelのオブジェクト(Rangeとか)を触った途端にExcelが消える。
で、マルチスレッドは出来ないけどマルチプロセスは出来る。
1.プログラムのブックに指定のURLのページの情報を取ってくるプロシージャを作る
2.複数のExcel.Applicationを使って、自分自身のブックを別のExcelから開くメインプロシージャを作り、その中でobjExcel.Runを使って情報を取ってくるプロシージャを動かすようにコードを書く。
3.ブックを保存する。
4.メインプロシージャを動かす
たぶん、こんな感じでできたはず。
>>744 ありがとうございます。
しかし、もし50個URLがあれば50個新しくExcel自体を起動しないといけないのですか?
そんなことしたら激重になってしまうように思うのですが。
複数のInternetExplorer.Applicationのインスタンス立ち上げれば行けんじゃないか
>>746 今それができないって会話をしてたところだけど理解してる?
>>741 フレームを50個並べたページのHTMLをローカルで作って開けば一気に読み込んでくれる
なんか勘違いしてるやつがいるけど、VBAがマルチスレッドじゃないことと、IEを複数開くのはまったく別のことだからな IEはOfficeとはまったく無関係の独立したプロセスだから、いくつでもインスタンス化できるし同時にネットアクセスできる IEオブジェクトを配列で作っといて、ページの読み込み完了を待たずにどんどん開いてけばいいんだよ
>>751 そのプロセスを制御するVBAがシングルスレッドだろ
IEにタブをいくつも開いてもらって、みんな読み込んだところでおもむろに順番に処理すればいいってことだろ。
>>752 VBAはシングルスレッドだが、IEでの読み込みは同時並行的にやってくれるんじゃねえの?
>>750 ?
>>751 その具体的な方法をコードで例示する形で教えていただきたいのでござるよ。
いまだと
Do While readyState < 4
Do Events
Loop
の待ちを50個のURLで1つ1つ順番にやってて
1つのURLを読んでデータ取って閉じる、というのをやるのが社内ネットワークが遅いため(データベースからの読み込みも含まれるからの)1つあたり1分近くかかってる。
だから異常に時間がかかる。
一気に全部同時にやれないかなと。
そんなもんそれこそ流行りのRPAでやればいいのでは
そもそも回線が細いのはプログラムでどうこうできないから上司を説得して諦めてもらうしかない
趣味でやってるんじゃなかったら 適当なダウンロードソフト使ったほうが良いんじゃない
動くかどうか試してないけど、こんな感じでいいんじゃない? もう少し効率を上げるなら、読み込めたページからさっさと処理してもいいし 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
>>761 ありがとうございます。
試してみます。
最初のFor Nextループがものすごく時間がかかりそうで楽しみです。
あと先日は説明の簡略化のためにシンプルに書いたけど
実は開いたURL内で、ある条件があると、さらにその親URL内のAリンクの子URLも開かないといけない複雑な事情があるのです。
>>761 Exit For抜けてますよ
フラグも i = pg-1まで行けたときに立たせるだけで十分だと思います
あと、非表示でIEを50立ち上げると中断した時のプロセスの掃除が大変なので、Ajaxで無ければXMLHTTP60を使うのも手かもしれません。
>>752 まさかIEオブジェクトの読み込み動作がVBAのスレッドで処理されてると思ってるのか?
>>753 終わりじゃないので考慮点はある
コード書こうかと思ったけど、
>>761 さんが書いてるからまあいいか
読み込み完了の検出とかどうするか悩みどころではある
イベントハンドラの動的設定か、せめてWithEventsが配列にも宣言出来ればなぁ
まあ50も多重化してもオーバーヘッドかかるだけで高速化しない気がするから
数個固定で持たしてイベントハンドリングするのが現実的かもしれん
この場合Do Loopを抜ける条件が全ページの完了だから、Exit Forはあってもなくても結果というかスピードは変わらないね さっさと抜けたところで、またForループに戻るだけだし 個人的には「pg - 1」が何回も出てくるのが美しくないなあとか、ForとDoの順番を逆にした方がコンパクトになりそうだなあとか
一括処理なら、この方がコンパクト まあ、ホストの応答速度や、次の処理の内容次第では終わったページからどんどん片付けた方がいいだろうけど For i = 0 To pg-1 Do Loop Until ie(i).readyState >= 4 Next
>>765 > 個人的には「pg - 1」が何回も出てくるのが美しくないなあとか
C言語とかに慣れてるんだろう
VBA的には
ReDim ie(1 To pg)
ReDim url(1 To pg)
For i = 1 To pg
だろうね
可能であればieとurlをTypeで纏めてそれを配列にした方が見易い
>>766 ははは、これは笑った。確かにこれが単純明快でコンパクト w
>>766 それだとサイズのでかいページで待ちが発生する
Do
For i
If ie(i)準備完了 And i.処理フラグFalse then
処理
処理フラグTrue
カウント
End if
Next
カウント=50 exit
Loop
>>769 投げてからの待ちだからいいんじゃねえの?
俺はやったことないから知らんが、投げたらあとはIEが並行処理で取ってくるんだろ
で全部取ってから次の処理なら問題ない
でかいページでVBAが待っていても同時に他のページもIEが取って来てるんじゃねえの
だからでかいページで待っていてもそれが終わったら他の軽いページも取り終っていてあとは
ばたばたと進んで終了、と理解している
>>769 ああ、すまん。それがわかってる上で待ち時間がもったいない、ということね
>>766 もそこは注意書きはしているな
IEはマイクロソフトも使うなって言ってるのに VBAって不便だよね
IE使えなくなったら、どうやってブラウザ制御するの? UIAutomation面倒くさいかから、
IE使えなくなったらってもう使ってる人なんていない セキュリティに甘いとこは使えるのか?
ちゃんと動くのか試してみた たしかにIEが複数開いて、平行処理でページを取ってくるね VBAのシングルスレッドとか完全に無関係やん
大昔からあるファイルシステムだって非同期読み書きできる 1000倍遅いネットワークで出来ないはずがないだろうが
現実的には50並列で全ページ完了待ちするのはどうもなぁ
あと全力でループまわして完了待ちするのも無反応になるんじゃね
とりあえずDoEvents挟もうぜ
>>776 スレッド以前に、IEオブジェクトが別プロセスだから
アウトプロセスのCOM使うのはVBAで並列やる、おそらく安全で簡単な唯一の方法
まあCOM作る方は大変だがな
>>777 OSがサポートしてるだけで、VBAから使えるかどうかとは別の話
VBAで非同期並列やりたければ、基本的にはイベントベースでしかサポートされていない
>>776 これ、1つずつ待つ部分がVBAでマルチにしたいって話だったけどCreateObjectで既に別プロセスだから全部投げてから全部の完了を待つので正解なんだよな。
勘違いしてマルチプロセスでやろうとしちゃったよ。
ついでにApplication.Runで出来なくて、迷ってたんだけど、またまた勘違いでApplication.OnTimeが正解だった。
でもOnTimeって戻り値が取れないんだよな。
あと、ExcelVBAスレにあるようにInternetExplorer.Applicationじゃなくて別のオブジェクトの方が早いと思うよ。
取りあえず書いてみたんだが、1つずつ待っても速度が変わらん。 テスト用に繋げた所があんまり時間が掛からん所でReadyStateのループに入らんのよ。 取りあえずInternetExplorer.Applicationはやっぱり遅かった。 59個のURLから同じ場所にある特定のデータを取ってくる処理でMSXML2.XMLHttpなら5秒のところIEだと60秒くらい掛かった。
IEを普通にUIを持ったアプリケーションとして開けば、クッキーや画面のレンダリングからアクセス履歴の更新やキャッシュの整理までいろんな処理が走るから、そりゃ実質GETだけのXMLHTTPと比べたら遅くなるのは当たり前と言うか
>>785 画像検索にそれぞれ違うキーワードを設定すれば、それなりに時間がかかるようになるから負荷のテストにはおすすめ
>>786 そんなことは知ってるが、ここの話で具体的なのがIEだから、いやいや、IEはこんなに遅いですよと注意喚起したんだよ。
まあ、Script関連でIEじゃないと駄目な場合もあるけどね。
真のエクセラーならieなんか使わずにwebクエリーとか使って何とかするべきだろうが
getElementByもWebクエリも使ったことあるけど、 Webクエリはどうやって取ってきてるのか謎。
レンダリングしないでペイロードのパースだけやってるんでしょ
誰もSelenium basic使わんの? IE使わなくていいしセッション維持とかも楽だぉ?
readystateが信用ならんのがな completeになっても完全に読み込めてなくてその後の要素取得処理に失敗とか高確率で起こるし WinHTTP使うのが確実だと思う
>>791 x だぉ
o だよ
正しい日本語を使いたまえ
結局Do LoopとOn Error Resume Nextで逃げるしかないっていう。
>>794 x 結局Do LoopとOn Error Resume Nextで逃げるしかないっていう。
o 結局Do LoopとOn Error Resume Nextで逃げるしかないっていうことですね。
正しい日本語を使いたまえ
では、教えてくれ。 正しい日本語の"正しい"とはなんのことだ。 先に言っておくが、国語辞典や義務教育は関係ないぞ。
>>798 国語辞典や義務教育関係ないと言うのならば口語体でも問題ないと思うが…。
例えば力不足、役不足のように意味を間違えて使っていては当然正しい日本語ではないが、今回の様な場合では相手方に伝われば良いということにならないか。
>>796 x 口語体が理解できないやつが正しい日本語とか
o 口語体が理解できないやつが正しい日本語とかどういうこと?
長いのでWithするかSetしましょう。 With 口語体が理解できないやつが正しい日本語 とか = × とかどういうこと? = 〇 End With
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
日付フィルターを使うときにCriteriaに設定する値って、必ず一旦Double型に型変換したDate型データをもとにしてFormat変換しなきゃいけないのかな? Date関数の戻り値をそのままFormat変換してもうまくフィルターがかからなくて危うくハマりかけたんだが、後学のために識者がいたら教えてほしい
>>807 x まともなレスには異論返せないのな
o まともなレスには異論返せないのね
VBAで実行時にシンタックスエラーが出るのはどういう場合だろう デフォルト設定だと1行入力ごとに構文解析するし
>>814 それ、1行ごとの構文解析だろ
For Next Do Loop If End If
のチェックまではしてないと思うぞ
ああすまん。これってシンタックスエラーではないんだっけ でもエラーになるよね
Nextを書かなかった場合は 「コンパイル エラー:For に対応する Next がありません。」 だった もしシンタックスエラーのエラーコード(変数Errの値)が存在すれば出る可能性があるってことだと思うけど、コードの一覧てどこにあるんだ? 検索してVBのは出るけどVBAのが見つからん
シンタックスって言葉自体は構文規則だけど、コンパイルエラーって出るんだね
ExcelVBAでListViewを参照設定で追加して フォームに配置して使っているんですが、 別フォームからshowしてすでに項目をいくつか追加してある ListViewのあるフォームを表示したときに ListViewをアクティブ(そのままの状態から矢印キーで項目を選択できるようにする) にすることは可能ですが? 例えば Public Sub UserForm_Active() With listview1 .ListItems(1).Select .SetFocus End With End Sub とした場合に、フォーカスは確かにListView1にあるのですが、 その状態では項目が矢印キーの上下で選択することができません。 ListView1.SetFocusではListView1全体にフォーカスはあるが 肝心の中身の項目にはフォーカスがない状態ということなのでしょうか? なにかよい方法はありますでしょうか?
sendkeysで Alt↓までやっちゃうとか あまりおすすめできる方法ではないが
VBA勉強中のものです。 Setステートメントを勉強しているのですが、オブジェクト型についてお聞きしたいです。RangeオブジェクトとかWorksheetオブジェクトなど、いろんなサイトなど見ても使いどころがよくつかめてないです。 どんなときに使うのか、教えてもらえるとありがたいです。
Excel VBA 質問スレで質問してみます。お邪魔しました m( _ _ )m
>>823 オブジェクトなら同じものを頻繁に扱うときにコーディングミスをしにくくなる。
毎回、名前でアクセスしていると、ちょっとしたことで、別のものを間違って扱う可能性が高まって、実行時エラーを発生させやすくなる。
定数化していれば防げるが、定数のスコープを大きくしないといけないので、定数の値を変えるときにあっちこっちを確認しながら、直すことになり面倒なことになりやすい。
object型の初期状態はNothing 参照先が存在しない場合もNothing返るのがあってis式で判定できる 一方でvariantの初期状態はemptyなのでis式がエラーになる
オブジェクトの値がNothingかどうかで判断するロジックはセンスがいいとは思えない。
Typenameとか列挙定数とかポインタ関数の値で判定するのが良いわな
自分で変数の値をコントロールしているのに、Nothingかどうかをあちこちで確認しているクソプログラマと1年前に仕事した。
>>827 ライブラリ側は何で判定すべきなんだ?
それともNothingを渡されたら挙動は未定義とするとか?
>>830 そのライブラリは他人が作ったものなのか?自分が作ったものなのか?
ライブラリに状態を持つプロパティがあればいい。 他人が作ったものを使うしかなく、オブジェクトがNothingかどうかでしか判断できないのなら、そうするしかない。
>>833 ライブラリ関数が引数として受け取ったオブジェクトをどうNullチェックするかの話だぞ?
いきなりライブラリと言われても何のことやらわからない。
>>835 >>827 が「オブジェクトの値がNothingかどうかで判断するロジック」って言ってるじゃん。
ある関数がオブジェクトを受け取ったときの判断方法の話だと思うんだけど、
自分はライブラリ作者なのでその場合どうするのがいいのか気になった。
>>837 エラーとは限らないけど変数の状態に応じて処理を分けたいと言うのはある。
空のオブジェクトに対してはまた空を返すとかね。
>>829 の言ってることはわかるんだけど、
>>827 と
>>828 の主張がわからん。
Nothing判定はシンプルだけどTypeNameやenumだともっと分岐のパターンが増えちゃうじゃん。
>>836 世の中、変なやつがいて、オブジェクト変数に値をセットして、何も変わるはずがないのに、直後にオブジェクト変数の値がNothingかどうか判定するコードを書くやつがいる。
代入が成功したかどうか確認するテクニックも存在するから、そういう分野からの転職かな? 具体的には、コンパイラの型チェックを使った裏技だったり、ハードウェアの故障チェックなんかで使われる
直後であってもサブルーチンに分かれてるなら 入力情報のチェックを行うのは普通のこと
なんか例のCプログラマがしつこいけど、いまどき関係ない別プロセスがメモリ上の値を書き換えたりするミスは、OSレベルでもCPUレベルでもあるので、持論を批判されていると思って反論しなくていいよ。 ここは漠然としたVBAのスレッドだから、見ているひとにはあなたの言うことは難しくて理解できないと思うよ。 スルー力がないのか、寂しくてかまってほしいのか知らないけど、要はクソコードを書くなと言ってるだけだ。
なんでVBAスレで組み込み系のショボいハードウェアでのプログラミングを語っているのか? ハードウェア、OS、ミドルウェア、プログラミング言語によって考え方やどこまで想定するのかは全然、違うからいっしょくたにしないでもらいたい。
一般ユーザー権限のアプリで別プロセスのメモリにアクセスできたのは、平成どころか昭和時代の話ですよ、おじいちゃん 希にOSやCPUのバグ騒ぎが起きますが、そんなのは例外中の例外なんで普通は気にしなくていいことです
Windows 95、98、98SE、MeがいつのOSかもわからないのか
せっかくのイベントなのにPrivateにしたら星飛雄馬のクリスマスパーティーみたいになるじゃん
何か面白いこと言った? 全然わからない。 興味あるからなぜ面白いか教えて?
read.cgi ver 07.7.25 2025/07/21 Walang Kapalit ★ | Donguri System Team 5ちゃんねる
lud20251007020039caID:BVBInYIbのレス一覧: vbaの And, Or って短絡評価してくれないの???
>>227 普通しない
(常にしないかどうかは知らんけど)
X(n) And Y(m) で X(n) = False だった場合、Y(m) は評価しなくても式が False と確定する Or でも同様のことが可能 VBAがショートサーキットしているかどうかは、各関数で Debug ログを出力してみればわかる
>>229 いちいち短絡評価の説明なんてしなくていいよ...
くぅ。 短絡評価してくれるもんだと思って、 True, False, Nullを返す関数の結果で、 NullをFalseに倒したくて、 左辺でNot isNullやってたけど、 右辺もNullで動いてしまってエラーになってはまったわ。
.NetならOrElseやAndAlsoが使えるし Nullable指定も出来るから便利なんだけどなー まあ無いものねだりしても始まらないか
VB(A)はWithとかある割にそういうとこは全然気が利かないよな C言語すら知らない人が作った言語なんだろう事は判る
VBって元々はMSじゃないんだよね BASIC好きのゲイツが惚れ込んで買収しただけ
漠然と「VBAの初心者向けの本を教えてください」ってのはよくあるが、上級者向けは珍しいね ある程度基礎が身に付き、やりたいことが分かってきていれば ○○に関する本、ってなるように思うんだが・・・ 田中亨氏の「Excel VBA 逆引き辞典パーフェクト 」は名著だよ
>>237 ありがとうございます。
クラスや多段階配列、イベント自作、擬似コントロール配列あたりの情報がある書籍はありませんか?
アプリ作成で学ぶExcel VBAプログラミングユーザーフォーム&コントロール(横山達大著) かんたんプログラミング 応用編(大村あつし著) 同じく、かんたんプログラミング コントロール関数編 デバッグ関連だと 立山秀利著の本
VBAでコードを抜き出してSVNやgitで管理したりするとそれだけで上級者っぽくなる
PowerPointのVBAでファイルを閉じた後も変数の値が保存されるようにしたいんですが外部のテキストに書き出す以外にファイル本体にどうにかして埋め込む方法はありますか?
透明のシェイプとかに書くとか色々あるけど 実際本体ファイルを更新されるとバージョン管理とか使う側が気持ち悪がるとか運用面で問題が出そう
Excel脳っすなぁ 標準的なユーザーデータ保存場所がちゃんとあるんだからそれ使えばいいじゃん
>>246 条件によるだろ
思いつきで即答すんなアホ
>>249 条件って
ファイル本体に埋め込みたい
ってことだろ
>>246 の保存場所がどこの事を言ってるのかよくわからんが
>>245 より
>>248 の方がはるかにマシ
ファイル本体に埋め込みすんのがアホなんだよわかれよ素人 ゴミを量産して人に迷惑かけないでくれ 独りよがりの仕事してんじゃねえよ
実際に仕事してるとそれこそ基地外避けを作る必要が出てきたりするんだよな
ユーザーデータを変な場所に保存したりするやつとか避けないとな
>>254 > 変な場所に
透明のシェイプとかのことですね、わかります
50枚のスライドが入ったパワポが5個あります。 これを統合したいのですが ファイル1の1枚目 ファイル2の1枚目 ファイル3の1枚目 ファイル4の1枚目 ファイル5の1枚目 ファイル1の2枚目。。。 という順番にしたいのです。 どういうマクロを書けばいいでしょうか?
ExcelVBAをつかいこなしていても パワポはマクロの記録がないと腰が重いな
>>256 この作業用を何回も繰り返さないといけないの?
1度きりならあなたの場合は手作業の方が早い気が
>>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(新規のファイル)
選択されているセル範囲内の文字、図形を削除する手順を作ってみましたが、処理がえらく重いです。 もっと処理を早くする方法はないでしょうか? 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
レス:1-200 201-400 401-600 601-800 801-1000 ALL
このスレへの固定リンク: http://5chb.net/r/tech/1432173164/ ヒント: 5chスレのurlに http ://xxxx.5chb .net/xxxx のようにb を入れるだけでここでスレ保存、閲覧できます。TOPへ TOPへ
全掲示板一覧 この掲示板へ 人気スレ |
Youtube 動画
>50
>100
>200
>300
>500
>1000枚
新着画像 ↓この板の人気?スレ↓(一覧 ) ・シェルスクリプト総合 その29 ・くだすれPython(超初心者用) その36 ・WPF(.NET, WinUI) GUIプログラミング Part33 ・次世代言語18 Go Rust Elixir Kotlin TypeScript ・Ruby 初心者スレッド Part 59 ・オブジェクトチンポシコシコ隔離病棟 ・C#は糞2.0 ・ガチで便利な開発ツールを挙げるスレ ・人工知能を作ろうver0.0.7 ・トランプであらゆるアリゴリズム ・EclipsでJavaによるプロジェクトを製造 ・Java入門・初心者質問スレ Part.3 ・Xamarin Part6 ・バージョン管理システムについて語るスレ10 ・LinuxカーネルはC言語なのにオブジェクト指向 ・ChatGPTすごいな。これなら料理下手な俺でも ・VBScriptについて必死に話し合うスレ ・最近の奴は0.001秒で何命令実行できるかも知らない ・【統計分析】機械学習・データマイニング29 ・プログラミング未経験だけど覚えたい言語がある ・【会津】パソコン甲子園2004【若松】 ・Kotlin ・くだすれPython(超初心者用) その40 ・なぜ世界中でP2Pシステムは成功しなかったのか? ・関数型言語ML (SML, OCaml, etc.), Part 7 ・Visual Studio Code / VSCode Part13 ・Rust part17 ・これって解読可能ですか? ・Perlについての罵倒スレ 63箱目
15:19:48 up 25 days, 6:41, 2 users, load average: 299.07, 325.12, 309.97
in 0.080613851547241 sec
@[email protected] on 111705