Excel VBA 質問スレ Part32
■ このスレッドは過去ログ倉庫に格納されています
0001デフォルトの名無しさん
2013/10/07(月) 22:19:55.86★1 質問テンプレ(雛形)は用意しませんが、OSとExcelのバージョンは必ず書きましょう。
★2 ExcelのVBA以外の部分に関する質問はNGです。
但し、VBA無しでも出来ることだが、あえてVBAでやりたいって物に関してはOK。
★3 ExcelのVBE(Visual Basic Editor)を使うとしても、VBAの分野以外に関してはスレ違いです。
VBAとは、『Visual Basic for Applications』の略で
Application
├Workbooks
|└Workbook
| ├Worksheets
| |└Worksheet
というApplication以下のオブジェクトを、VB言語で操作するものを指します。
例えExcel付属のVBE(Visual Basic Editor)を利用しようとも、このApplication以下のブックやシート、
セルやオブジェクト等を操作するもの以外はVBA分野の話ではないので、ここでは聞かないでください。
★4 とりあえず、Excelのインスタンスを作らずにVB6で出来ることは全てスレ違いだと思ってください。
★5 レベルはどうあれ、ここはプログラマ用の板スレです。プログラマとは、自分でプログラムを組み、
コードを書く人の事なので、自分でやるきは全く無く、丸投げしようって人はお断りです。
ヒントを貰えばあとは自力でなんとかしますって人のみどうぞ。
★6 わからなければとりあえず「マクロの記録」(Alt, T, M, R)
前スレ:Excel VBA 質問スレ Part31
http://toro.2ch.net/test/read.cgi/tech/1376371376/
関連スレ:VBAなんでも質問スレ
http://toro.2ch.net/test/read.cgi/tech/1342087380/
0197デフォルトの名無しさん
2013/12/14(土) 23:01:48.05提議じゃなくて定義な
双方にメリットとデメリットがあって、優劣が決まらないから荒れるんだよ
初心者なら議論に参加して、そういうのを再確認するのは無駄ではないと思うけど、
このスレでは何度も同じ話題がループしてるんで、常連はもう飽き飽きしてる
0198193
2013/12/14(土) 23:30:51.83>定義 失礼しました。。
なにやら振れてはいけない話題であったようですね
今書いているVBAは仕事ではなく趣味の週末データー解析ですので
動作に問題がないようでしたら自分のやりやすいように書く事にします。
ありがとうございました。
0199デフォルトの名無しさん
2013/12/14(土) 23:33:55.42先頭で定義する「必要」はないよ。(宣言必須なら)その変数を使うまでに宣言すればいい
>>194
そのガイドラインってのが何を指してるか知らんが
すくなくともヘルプのDimステートテメントには
>プロシージャ内で Dim ステートメントを使用する場合は、通常、Dim ステートメントをプロシージャの最初で記述します。
と書いてあるわけだが
>>196
お前一人が見るプログラムならどこで定義してても良いよ
他人も見るプログラムなら、ルール決めてそれを守れば良い
おそらく定義だけの位置では処理速度は変わらん
プロシジャ単位で実行時にコンパイルするからな
New付きで定義したらどうなるかはしらん
0200デフォルトの名無しさん
2013/12/14(土) 23:51:09.23http://10up.20ch.net/s/10mai2010845.png
0201デフォルトの名無しさん
2013/12/15(日) 01:56:07.75基本的に、なら、例外的に、で返せるが。
なんて邪推か。とりあえず上に書いておくのが慣例よ。
各自都合のいいルールを模索しそれに従ってください。程度だろうね。
自動で半角スペースの処理が行われてしまうみたいに、
宣言句は関数の上の方に移動させられてしまうわけでもないし。
0202デフォルトの名無しさん
2013/12/15(日) 01:56:59.76シーぷらぷらスレでエクセルネタとしてレスするのが無難加藤
0203デフォルトの名無しさん
2013/12/15(日) 01:57:31.300204デフォルトの名無しさん
2013/12/15(日) 02:11:46.970205デフォルトの名無しさん
2013/12/15(日) 02:43:02.74何が?
forみたいなシステムに最初から入ってるキーワードがForになるのを防ぐ方法はないよ
0206デフォルトの名無しさん
2013/12/15(日) 08:49:33.250207デフォルトの名無しさん
2013/12/15(日) 09:05:07.040208デフォルトの名無しさん
2013/12/15(日) 10:09:18.120209デフォルトの名無しさん
2013/12/15(日) 15:47:09.25VBEエディターで置換をするときに
改行を含まない1行のコードのみ置換できるようですが
複数行をまとめて置換する方法は無いのでしょうか?
0210デフォルトの名無しさん
2013/12/15(日) 16:15:10.27無理
0211デフォルトの名無しさん
2013/12/15(日) 17:13:17.83モジュールを30個ほど連結させたのですが
全モジュールの特定の箇所に数行コードを追加したいときに
複数行置換ができたら1発でできるのになあと思いましたが。
1モジュールだと他のエディターで置換して戻せばいいですが
モジュールが別れていて数が多いとひたすらコピペを正確に繰り返すしか手がないようで骨折れまくってます。
0212デフォルトの名無しさん
2013/12/15(日) 18:23:31.030213デフォルトの名無しさん
2013/12/15(日) 19:13:37.07っていうか、ある程度長いコードは最初から外部エディタ使うだろ
内蔵エディタは編集機能が貧弱すぎて話にならない
0214デフォルトの名無しさん
2013/12/15(日) 19:34:13.78>モジュールを30個ほど連結させたのですが
>1モジュールだと他のエディターで置換して戻せばいいですが
30モジュールを連結して1モジュールにしたのではなくて?
というか30回繰り返す程度ならたいした手間ではないような・・・
0215デフォルトの名無しさん
2013/12/15(日) 22:35:19.55三行目と四行目には空行があるよ。行間を嫁。
30Mod時なら1Mod丸々置換すればいいが、と言っている
0216デフォルトの名無しさん
2013/12/15(日) 22:37:54.88>モジュールが別れていて数が多いとひたすらコピペを正確に繰り返す
ここか。ここがbefore/afterをわからなくさせてるな。ごめん>>214。
0217デフォルトの名無しさん
2013/12/15(日) 22:40:25.310218デフォルトの名無しさん
2013/12/15(日) 22:46:29.720219デフォルトの名無しさん
2013/12/15(日) 22:48:22.390220デフォルトの名無しさん
2013/12/17(火) 22:45:22.58WorksheetFunction.Matchで照合の型を-1で、降順に並び替えれば
うまくいきますが、データは昇順の状態で
一年前の最古のデータ行を拾う方法ありますか?
昇順のままで照合の型を-1だと当然失敗します
(最新のデータを拾ってしまいます)
いろいろ調べたのですが、いい方法がみつかりませんでした
どなたかいい方法ありませんか?
0221デフォルトの名無しさん
2013/12/18(水) 07:31:12.64一年前の最古って何?
仮に今日が2013/1/1なら一年前の最古って何年何月何日なの?
0222デフォルトの名無しさん
2013/12/18(水) 14:19:06.90けっこうたくさんのFormを使ってるんですが動きが遅くなるのを心配してるんですが。
0223デフォルトの名無しさん
2013/12/18(水) 18:48:52.04「一年前」の「最古のデータ」だろ
地で曲解するタイプか
0224デフォルトの名無しさん
2013/12/18(水) 20:35:53.78と解釈したが。どうするかはわからぬ。
0225デフォルトの名無しさん
2013/12/18(水) 22:59:15.70エスパー検定受けるつもりも無いんで、下手に日本語でアレコレ言うくらいなら具体的な例を上げて説明して欲しいっすな
0226デフォルトの名無しさん
2013/12/18(水) 23:25:43.80データの何かの日付が2012/1/1のもののうち一番古いデータだろ、たぶん
まあまともなレス欲しいならそのデータのシート例だせと
0227デフォルトの名無しさん
2013/12/19(木) 00:15:07.120228220
2013/12/19(木) 01:48:39.04最古って表現が適切でなかったですね
0229デフォルトの名無しさん
2013/12/19(木) 07:38:05.88いえいえ、私達の助言のおかげで解決できて良かったです
0230デフォルトの名無しさん
2013/12/19(木) 08:25:55.401.エンドユーザー向けに配布するEXCEL
2.項目(150位)を入力して、エラーをチェックして最終的にCSVを吐き出す
3.区分などはCombboxで実装(区分値の追加はたまに発生する)区分は30個ほど
4.入力した複数の条件でコード値を取得する処理あり
5.マルチランゲージ(ただし、日本と海外は別ブック)
項目(150位)のセル位置管理、エラー処理
区分値の管理はどうしたらいいと思いますか?
自分の知識で考えた結果は
項目の管理
→TXTにパラメーターをもたせて、ブックを開いたタイミングでクラスオブジェクト(自作)
に落として、collectionで管理する
区分の管理
→Accessをローカル配置して、ブックを開いたタイミングで更新
0231デフォルトの名無しさん
2013/12/19(木) 18:02:06.46>項目(150位)のセル位置管理
決め打ち
セルに名前つけて名前で管理
セル位置と処理内容の対応シート作って管理
>エラー処理
好きなようにしろ
>区分値の管理
区分値用のシートに書いとく
俺ならEXCELで配布するならそのブックだけで完結するようにするが
区分の管理は一括なのかローカルなのかとか、色々考える事が多くて何とも言えん
まあ、好きなようにしろとしか
0232デフォルトの名無しさん
2013/12/19(木) 18:24:22.860233デフォルトの名無しさん
2013/12/20(金) 16:12:59.17いつ切り捨てするのかよくわかりませんでした。
計算は1度計算したのをさらにかけたり割ったりします。
ここで、
最初にかけ算→小数点切り捨て→かけ算
なのか
かけ算→かけ算→割り算など全部した後いっきに切り捨てた方が良いのか
前者でやっていたんですがこの2つだと当然答えも違ってきますよね
普通どっちが正解なんですか?
0234デフォルトの名無しさん
2013/12/20(金) 16:33:59.75普通は、計算誤差というものに思いを馳せる
0235デフォルトの名無しさん
2013/12/20(金) 16:39:27.59レスありがとうございます
もしあなたが先生だったら回答はどちらにしますか?
0236デフォルトの名無しさん
2013/12/20(金) 16:43:08.850237デフォルトの名無しさん
2013/12/20(金) 16:48:03.001 / 3 * 3を計算して下さい。
0238デフォルトの名無しさん
2013/12/20(金) 16:56:45.30もう冬休み入っちゃって。
あーもう単位落としそうで心配だよお
0239デフォルトの名無しさん
2013/12/20(金) 17:50:29.510240デフォルトの名無しさん
2013/12/20(金) 18:07:18.650241デフォルトの名無しさん
2013/12/20(金) 18:12:45.79その中から特定の日付を見つけたいんですが(実際は日付そのもの
ではなく、その日付のある行を知りたい)、Findの使い方を教えて
ください
Dim target As Range
Set target = Range("A3:A150").Find(What:="2012/3/01", LookIn:=xlValues, LookAt:=xlWhole)
MsgBox target.Row ←
とすると、実行時エラー:91
オブジェクト変数またはWithブロック変数が設定されていません
ってエラーが←のところで発生します。
0242デフォルトの名無しさん
2013/12/20(金) 18:14:17.26="2012/3/1"
0243241
2013/12/20(金) 18:20:00.05テスト用のシートではその日付はA80にあるんですがね
0244デフォルトの名無しさん
2013/12/20(金) 18:24:49.950245デフォルトの名無しさん
2013/12/20(金) 19:39:52.680247241
2013/12/20(金) 20:20:20.05日付を変数として先ほどのものに与えるのはどうするんでしょうか?
Dim dt as Date
として
dt = 日付
Set target = Range("A3:A150").Find(What:=#dt#, LookIn:=xlValues, LookAt:=xlWhole)
とすると構文エラーになるんですが。
0248デフォルトの名無しさん
2013/12/20(金) 20:35:51.50いつ切り捨てするのかよくわかりませんでした。
計算は1度計算したのをさらにかけたり割ったりします。
ここで、
最初にかけ算→小数点切り捨て→かけ算
なのか
かけ算→かけ算→割り算など全部した後いっきに切り捨てた方が良いのか
前者でやっていたんですがこの2つだと当然答えも違ってきますよね
普通どっちが正解なんですか?
0249デフォルトの名無しさん
2013/12/20(金) 20:57:48.50「#〜# で囲む」 と「"〜" で囲む」 の意味の違いが判っていないからその質問になる。
0250241
2013/12/20(金) 21:27:42.490251デフォルトの名無しさん
2013/12/20(金) 22:40:03.70日付リテラル って書いても分からないと思うにで少し解説しておく
VB(A)では#で囲まれた日付と時刻は日付型(Date)の定数になる。("で囲めば文字リテラル・・文字型の定数)
よってWhat:=#3/1/2012# は日付型(Date)をWhatに指定していることになる。
これは
Dim dt As Date
dt = "2012/3/1"
・・・・・What:=dt,・・・・
と同じことになる
ちょっと書きすぎた。ついでに数値リテラルなども勉強しておくのが吉と思う
0252デフォルトの名無しさん
2013/12/20(金) 22:55:40.45あ〜、なるほど〜
その辺りは全然勉強してませんでした
ありがとうございますm(__)m
0253デフォルトの名無しさん
2013/12/21(土) 12:12:08.22なにに処理時間がかかってるかを調べたいのですが
どうするのが得策ですか?
なにが原因かがわかればあとはこちらでコードを改良します。
なので原因の調べ方。
0254デフォルトの名無しさん
2013/12/21(土) 12:27:40.19質問があまりにもざっくりしすぎ
原因も対処法もたくさんありすぎる
まず最初にマシンスペックを確認する
CPUの速度やメモリの量など
0255デフォルトの名無しさん
2013/12/21(土) 12:35:51.56その前後に時間を表示するようにして見てみるとか
というか1分も我慢できないとかwだったらExcelでやるんでなく実行ファイル(exe)作ってそれでやるようにしたら?
0256デフォルトの名無しさん
2013/12/21(土) 12:55:19.70をあちこちに入れまくる
0257デフォルトの名無しさん
2013/12/21(土) 14:12:00.66Application.Calculation = xlManual
0258デフォルトの名無しさん
2013/12/21(土) 14:13:25.50アルゴリズムが悪い
質問のレベルから見てあきらか
0259デフォルトの名無しさん
2013/12/21(土) 14:30:17.09むずか死ね
0260デフォルトの名無しさん
2013/12/21(土) 14:56:17.82そのまま「せっせせっせ」とWordに貼り付けたいんですが
どういうコードを書けばいいですか?
Wordにはページの上から下へそのまんま東の順番で並べ、表と表の間は改行を1行だけ挿入します。
0261デフォルトの名無しさん
2013/12/21(土) 16:46:02.95★zipファイルの「阪神無」フォルダー以下
「平成25年10月」の数値未発表で一部合計値比較不可能の為
平成25年9月〜平成13年4月は以下の各駅を合計・増減から除外して再計算。
「阪神」─「本線」─「阪神梅田」〜「千船」
「阪神」─「なんば線」─「大阪難波」〜「出来島」
★zipファイルの「阪神有」フォルダー以下
除外せず、「平成25年10月」の未発表数値を前年同月(平成24年10月)と同一と仮定
※「Hnn(年度)」…平成(nn-1)年4月〜平成nn年3月
※「中之島」「渡辺橋」「大江橋」「なにわ橋」…「H21」10月の[総数]は日割り(13/31日) 。
※「大阪難波」「桜川」「ドーム前」「九条」…「H21」3月の[総数]は日割り(12/31日) 。
※「総数」…「H18」の7月以降及び年度平均はOTS線を除いた数値となっている。
平成24年4月〜平成25年10月
http://www.city.osaka.lg.jp/toshikeikaku/page/0000020916.html
[2013年12月20日]
http://www.city.osaka.lg.jp/toshikeikaku/cmsfiles/contents/0000020/20916/6-2.xls
平成24年3月〜平成13年4月
http://www.city.osaka.lg.jp/toshikeikaku/page/0000164566.html
[2013年6月4日]
http://www.city.osaka.lg.jp/toshikeikaku/cmsfiles/contents/0000164/164566/12-6.xls
0262デフォルトの名無しさん
2013/12/21(土) 16:58:15.50スクロールも選択もできなくはなるけど
リストはグレーアウトしないの?
コンボボックスはグレーアウトするのに
0263デフォルトの名無しさん
2013/12/21(土) 19:08:01.72そういうコードを書けばいい
何がわからないんだ
0264260
2013/12/21(土) 20:14:42.98具体的には?
Selection.Copyまではわかるが、そのあとはこんな感じか?
Selection.Copy Destination:=Word.Documents(1).ActiveCursor
0265デフォルトの名無しさん
2013/12/21(土) 21:18:08.98多分ワードに直接貼り付けとか出来ないと思う
一旦クリップボード経由させるのが楽なんじゃね
0267デフォルトの名無しさん
2013/12/23(月) 01:32:23.38ユーザーフォームにコマンドボタンAとBがあって
Aをクリックするとデータの抽出
Bをクリックするとデータを抽出した後、特定のデータに色をつける
この場合、BにAと同じ構文を書いた後、色付けしてるのですが
省略ってできないでしょうか?
あまりに長くなるのでなんとかしたいです
0268デフォルトの名無しさん
2013/12/23(月) 03:31:36.24「Sub 抽出」を用意しといて、Aからは抽出を呼び出すだけ
Bは抽出を呼んだあと色付けするようにプログラムを作ればいい
0269デフォルトの名無しさん
2013/12/23(月) 08:32:52.21データの抽出
End Sub
Private Sub btn_B_Click()
データの抽出
データに色付け
End Sub
Sub データの抽出()
End Sub
Sub データに色付け()
End Sub
0270デフォルトの名無しさん
2013/12/23(月) 10:39:37.720271デフォルトの名無しさん
2013/12/23(月) 14:10:40.000272デフォルトの名無しさん
2013/12/23(月) 16:33:14.05ありがとうございました。
全体がすっきりしました。教えてくれた方、素敵です。
0273デフォルトの名無しさん
2013/12/24(火) 12:07:04.760274デフォルトの名無しさん
2013/12/24(火) 12:08:07.16いつも中央に寄っています。
0275デフォルトの名無しさん
2013/12/24(火) 16:22:57.85VBAのフォームのコマンドボタンではTextAlignプロパティが公開されていないので無理です
テキストの後ろにスペースを足して、左に寄っているように見せかけるか、ボタンの上にラベルを貼るか
最初からラベルだけにしてボタン的な使い方をするかしてください
0276デフォルトの名無しさん
2013/12/24(火) 21:56:14.31ティでボタンに貼る。
「PicturePosition」プロパティで、「fmPicturePositionLeftCenter」を
指定すれば、「Picture」プロパティで指定した画像の幅だけテキストが
右に寄り、「fmPicturePositionRightCenter」を指定すれば、左に寄る。
これなら1ドット単位で指定できるが...。
0277デフォルトの名無しさん
2013/12/25(水) 16:13:28.240278デフォルトの名無しさん
2013/12/25(水) 16:14:03.220279デフォルトの名無しさん
2013/12/25(水) 16:32:51.190280デフォルトの名無しさん
2013/12/25(水) 17:22:19.39残業200時間までは働けるぞ、仕事くれ。
0281デフォルトの名無しさん
2013/12/25(水) 19:14:41.33トータルで350時間くらいか。
働き者だなぁ。
0282デフォルトの名無しさん
2013/12/26(木) 13:04:36.260283デフォルトの名無しさん
2013/12/26(木) 21:19:03.410284デフォルトの名無しさん
2013/12/27(金) 12:51:03.640285デフォルトの名無しさん
2013/12/27(金) 12:59:16.930286デフォルトの名無しさん
2013/12/29(日) 21:51:06.62なぜ標準モジュールに作らないとダメなんですか?
ThisWorkbookモジュールやSheet1モジュールじゃなぜ動かないんですか?
理由が知りたいです。
0287デフォルトの名無しさん
2013/12/29(日) 21:59:39.81>シートに自作関数を作るとき
どゆこと?
0288デフォルトの名無しさん
2013/12/29(日) 22:06:15.500289デフォルトの名無しさん
2013/12/29(日) 22:16:09.85(1) 関数、IsNumberとIsNumericの違いはなんですか?
(2) それはどうやって調べましたか? (記憶してた人は回答しないでね)
(2)のほうがすごく知りたいです。なぜなら調べる方法がちゃんとわかっていればこのことに限らずこんご自分で解決できるから。
GoogleというのはできればNGでお願い。
0290デフォルトの名無しさん
2013/12/29(日) 22:45:57.27Yahooならいいんか?
0291デフォルトの名無しさん
2013/12/29(日) 22:54:17.48Ahoo
0292デフォルトの名無しさん
2013/12/29(日) 22:57:57.90VBAの組み込み関数かEXCELのワークシート関数かとか
型チェックするか暗黙の変換するとかしないとか
とりあえず両方のヘルプみれば済む話
0293デフォルトの名無しさん
2013/12/29(日) 23:05:10.44マイクロソフトがそう言う風にEXCELを作ったから
それ以上はマイクロソフトに聞かないとわかりません
0294デフォルトの名無しさん
2013/12/29(日) 23:05:12.81簡単にヘルプとおっしゃいますが
どうやってヘルプを起動するかとか
そのあとどうやって知りたい機能の関数を検索するかとか
そういうのが知りたいのですが
0295デフォルトの名無しさん
2013/12/29(日) 23:06:26.77マイクロソフトがどう言う風にEXCELを作ったかを調べるほうほうを聞いているのですが
0296デフォルトの名無しさん
2013/12/29(日) 23:18:02.59ヘルプだしたことないのかよ?
VBEのメニューにあるし、普通は知りたいところでF1押すだけだ
■ このスレッドは過去ログ倉庫に格納されています