トップページtech
1001コメント393KB

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

■ このスレッドは過去ログ倉庫に格納されています
0001デフォルトの名無しさん2015/01/09(金) 16:59:02.80ID:GzFHQ3J4
ExcelのVBAに関する質問スレです

★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 質問スレ Part35
http://peace.2ch.net/test/read.cgi/tech/1414186311/

関連スレ:VBAなんでも質問スレ
http://toro.2ch.net/test/read.cgi/tech/1342087380/
0322デフォルトの名無しさん2015/02/04(水) 20:46:00.36ID:QfhTV/If
VBAのクラスモジュールを使ってみようか検討してるけど
継承とかコンストラクタとかが使えないならそんなに便利ではないという結論でいいんでしょうか?
いろんなデザインパターンを駆使して大規模システムをスマートにコーディングしようと考えているんだけど。
0323デフォルトの名無しさん2015/02/04(水) 20:57:12.79ID:Sl7HR56P
>>322
そうだね。
VBAはコンストラクタが使えないとか、
継承が使えないから便利ではないと言っているくらいのレベルなら、
正直オブジェクト指向自体が便利じゃないから止めといた方がいいと思うよ。
0324デフォルトの名無しさん2015/02/04(水) 21:12:55.81ID:5zzM5KFe
>>322
VBAのクラスでもカプセル化出来るし使える場面はあるはずだよ
大規模システムってどの位の規模?
0325デフォルトの名無しさん2015/02/04(水) 21:33:46.95ID:3HKYaoYX
VBA 大規模  ← 検索
0326デフォルトの名無しさん2015/02/04(水) 21:39:08.97ID:FmLt4Q/z
>>322
> 継承とかコンストラクタとかが使えないならそんなに便利ではないという結論でいいんでしょうか?

その結論でいいけど、>>321 みたいなこと聞いてるレベルならデザパタ云々の前にやることあるだろ...
0327デフォルトの名無しさん2015/02/04(水) 23:30:17.87ID:BFzhN8Yg
>>317
それはVBAでやるような話じゃない
オフライン ファイルでググれ

>>322
オブジェクト指向言語を想定したデザインパターンの話っていうならその通り
0328デフォルトの名無しさん2015/02/05(木) 00:00:11.44ID:BZaynF65
ま、それでも例えばテンプレートパターンが使えないなら
どんなパターンを使えばいいかとか、デザインパターン知ってればすぐ思い浮かびそうなもんだけどな。
0329デフォルトの名無しさん2015/02/05(木) 05:35:22.83ID:Z+/EIniY
Excelで大規模アプリ作るなら他の言語の方がいいんしゃね。
ACCESSでよかったじゃんってなる
0330デフォルトの名無しさん2015/02/05(木) 07:13:53.16ID:13xOFOi9
データはDB
ロジックは他の言語
Excelはビューおよびコントロールとして使う
こういうやり方が吉だ
0331デフォルトの名無しさん2015/02/05(木) 07:56:16.04ID:oPJAOj4g
VBAってエクセル97から仕様変更されてないの?
少しだけ機能が増えた程度?
0332デフォルトの名無しさん2015/02/05(木) 08:12:03.34ID:zH6zCuP4
エディタ古臭いよな
他のエディタと連携ってできる?
0333デフォルトの名無しさん2015/02/05(木) 08:24:30.87ID:9SfLMUWM
>>331
そういう下らない話は他でやれよ。
0334デフォルトの名無しさん2015/02/05(木) 12:01:16.49ID:psDjLvHN
VBAの仕様はポケットリファレンスって本に詳しく書いてあるからぜひ買って読んで欲しい
0335デフォルトの名無しさん2015/02/05(木) 12:21:05.11ID:5V2ZyrCG
>>332
ctrl+y の挙動だけは今だに許す気になれん
0336デフォルトの名無しさん2015/02/05(木) 16:31:44.91ID:8iV8xemp
Collectionオブジェクトを消去(解放)するときの質問です。

このページの「コレクション:解放方法」では、まず全部の中身をRemoveで削除してからNothingを代入しています。
http://mitene.or.jp/~rnk/TIPS_VB_GEN.htm

単にNothingを代入するだけではダメなのですか?
0337デフォルトの名無しさん2015/02/05(木) 16:37:39.43ID:Sga35B6x
別にそうしたければそうすればいいじゃない?
使わなくなった変数の中身がどうなっていようとかんけいないじゃん!
0338デフォルトの名無しさん2015/02/05(木) 16:57:01.69ID:8iV8xemp
いや重くなるのを心配してるんだ。
中身も使わなくなったら全部1つ1つRemoveしたほうがいい?
0339デフォルトの名無しさん2015/02/05(木) 17:25:30.07ID:TvPdQkb9
しなくていい
0340デフォルトの名無しさん2015/02/05(木) 18:07:11.99ID:gRFCSFT3
vb.net並みに便利してほしい
どうせVSも無料化してるんだし頼むよMS様
0341デフォルトの名無しさん2015/02/05(木) 18:10:53.32ID:LBbAtoIq
しなくていい
0342デフォルトの名無しさん2015/02/05(木) 18:13:56.63ID:osIltw0C
VBAでプログラム作る時
Option Base 0
Option Base 1
のどっちでやりますか?
0343デフォルトの名無しさん2015/02/05(木) 18:22:41.26ID:TvPdQkb9
>>342
配列使うことが滅多にないから、毎回dim ary(1 to 10)とかやる
0344デフォルトの名無しさん2015/02/05(木) 19:16:16.45ID:MCsqUTWq
>>336,338
そのコレクションの要素が、そのコレクションへの参照持ってたりしたら
単にコレクションの変数をクリアするだけじゃダメなはず
0345デフォルトの名無しさん2015/02/05(木) 19:18:09.07ID:i4Mluon0
既定は0 なんで0
0346デフォルトの名無しさん2015/02/05(木) 19:23:23.83ID:MCsqUTWq
>>342
宣言時に下限指定できるので、Optionで下限変える必要性が薄い
Option Baseにかかわらず0からの配列が生成される場合がある
なので
俺は特殊な事情がない限り、1からしか使わなくても、Option Base 0
0347デフォルトの名無しさん2015/02/05(木) 19:47:02.12ID:NPMhX/hm
>>346
> Option Baseにかかわらず0からの配列が生成される場合がある

LBound( ) 使うから、Option Base は設定したことない
つまりディフォルトのまま
0348デフォルトの名無しさん2015/02/06(金) 00:03:00.47ID:WyNOk6KO
配列をネストさせることってある?
Array(Array(0, 1), Array(2, 3), Array(4, 5))
なんか次元を増やすよりこっちの方が自然な気がしてきた。
0349デフォルトの名無しさん2015/02/06(金) 00:56:28.55ID:MCNka57c
>>348
そんなことできたっけ?
0350デフォルトの名無しさん2015/02/06(金) 01:52:43.14ID:d0YfM+I8
>>348
3次元も分かり辛そうだけどそっちも分かり辛そうだなw

複雑な構造を持つ場合はエンティティクラス作ってコレクションやディクショナリに格納するだろjk

入れ子にする場合はそのエンティティのプロパティを更にコレクションやディクショナリに詰め込んだ
エンティティクラスにしておけば、引っ張り出すとき何て言う項目か一目瞭然だ。

出来る出来ない以前の問題だわな。
0351デフォルトの名無しさん2015/02/06(金) 04:05:29.06ID:ph6zPD+r
配列の配列は別に珍しい方法でも特殊な概念でもないが
0352デフォルトの名無しさん2015/02/06(金) 07:09:22.82ID:WyNOk6KO
>>350
VBAでクラスやコレクションやディクショナリを使ったことはないな。
配列をすべて1次元に統一しておいた方が再帰処理とかしやすいような気がしてきてる。
0353デフォルトの名無しさん2015/02/06(金) 08:35:01.78ID:Uk3UX5SK
一覧表から名前を見つけてフォームのテキストボックスに入れて
そのボックスの右のボタン(Button2)を押したら、別ブックのセルA2にそれを入れる仕様

Private Sub Button2_click()
If TextBox2.Text = "" Then Exit Sub
Workbooks("書類作成").Worksheets("送り状").Range("A2") = TextBox2
Unload Me
Workbooks("一覧表").Close
End Sub

これでA2に入力はされるんだけど、それをF2キーを押して編集しようとすると
必ず固まって強制終了するんだけど、何がまずいの?
0354デフォルトの名無しさん2015/02/06(金) 08:57:43.16ID:kGu0ocwH
デフォルトプロパティって害悪でしかないよな
0355デフォルトの名無しさん2015/02/06(金) 12:32:58.10ID:My4Umhjn
>>352
別に統一性が取れていれば再帰は関係ないかな。
つまり役割ごとに違うクラスやメソッドを作って、その中で使い回せるところは別に切り出して使い回せってこと。
別に何でもかんでも1次元配列でやろうって訳じゃないだろ
0356デフォルトの名無しさん2015/02/06(金) 13:12:24.10ID:0+nTrOfH
テキストボックス内でEnterキーを押すと
となりにあるコマンドボタンを押したことにさせるにはどうしますか?
0357デフォルトの名無しさん2015/02/06(金) 13:25:49.45ID:NoLWhCAx
>>356
テキストボックス内でEnterキーを押されたら、コマンドボタンを押したときに実行される内容を呼び出す。
0358デフォルトの名無しさん2015/02/06(金) 14:05:20.82ID:0+nTrOfH
テキストボックス内でEnterキーを押されたことを検出するには?
0359デフォルトの名無しさん2015/02/06(金) 14:10:59.63ID:0+nTrOfH
VBAでクラスモジュールを使うんですが
クラスの中に他のクラスをプロパティとしてつかういわゆる集約という使い方はできないのですか?
エラーが出ちゃいます。
0360デフォルトの名無しさん2015/02/06(金) 14:18:33.05ID:NoLWhCAx
>>358
ggrks

>>359
できる
やり方はggrks
0361デフォルトの名無しさん2015/02/06(金) 14:35:30.56ID:0+nTrOfH
>>360
dmrks
0362デフォルトの名無しさん2015/02/06(金) 14:55:27.75ID:NoLWhCAx
なんだ、荒しか
0363デフォルトの名無しさん2015/02/06(金) 18:13:25.00ID:My4Umhjn
>>359
型やスコープはあってるの?
どんなエラーメッセージが出てる?
0364デフォルトの名無しさん2015/02/06(金) 18:19:16.08ID:0+nTrOfH
>>363
ふつうのはできてるけど
Collectionをクラスのプロパティにするとエラーがでちゃうんですよ。
0365デフォルトの名無しさん2015/02/06(金) 18:35:37.12ID:NoLWhCAx
エラーメッセージ書けと言われてるのも理解できないのか
0366デフォルトの名無しさん2015/02/06(金) 21:47:23.64ID:WyNOk6KO
>>355
メインの言語は別にあって、Excel/VBAは手元のデータの取り回しに特化してる。
だからVBAでクラスやメソッドをつくるのはちょっと遠慮しておきたいな。
なんでもかんでも配列でやっているんだけど、多次元のうっとうしさが嫌になってきてる。
とは言え「表」計算ソフトなんで、2次元の表という形式からは離れがたい。
0367デフォルトの名無しさん2015/02/06(金) 23:11:57.30ID:WyNOk6KO
多次元配列と1次元配列が事前に区別できないのがつらい。
作った関数に配列を渡したとき、次元に関わらず同じ意味のことをやれるなら問題ないけど、そうじゃないことも多い。
2次元の時は、処理を縦に適用するのか横に適用するのかという(1次元の場合にはない)問題が発生して、
それを指定するための引数が余分に必要になったりする。
0368デフォルトの名無しさん2015/02/06(金) 23:47:26.16ID:d0YfM+I8
>>367
例えばAというシートとBというシートにそれぞれ一覧を出力したいとする。Aには1行、Bには複数行出力するとして、
出力位置も違えば計算方法も違う。でもシートに出力するという意味では同じ。
そうしたとき、同じ関数でまかなう?違う関数を呼びだす?違うクラス作る?
0369デフォルトの名無しさん2015/02/07(土) 00:17:28.66ID:2PYtlFBn
>>368
事前の計算から出力まで一体化するわけじゃないんだろ?

出力だけならどちらも
Range( X ).Value = data
という同一の式で書けるんだから、同じ関数だろう。
dataの中身が何行あるかで分けるなんてナンセンス。
0370デフォルトの名無しさん2015/02/07(土) 02:16:49.45ID:0QjeMX7S
>>368
何を言わせたいのか分かるけど、敢えて何も言わない
俺もどんなレスがつくか生暖かい目で見守ってたい
0371デフォルトの名無しさん2015/02/07(土) 07:29:05.15ID:2PYtlFBn
>>368
>>370

計算方法が違うなら3段階に分けるだろ。
処理Iと処理Oは共通。そういうことが聞きたいのか?

            
シートから入力 |       処理I(引数:入力レンジ)
--------------------------------------------------
計算        |   処理C1   処理C2
--------------------------------------------------
シートへ出力   |      処理O(引数:出力レンジ)

どっちにしろワークシートとのI/Oは2次元なんだから、こういう部部分で次元について悩む要素はない。
そういうのと関係ない部分では多次元は扱いづらい。
0372デフォルトの名無しさん2015/02/07(土) 07:37:32.14ID:2PYtlFBn
引数が足りなかったな

処理O(引数:出力レンジ、引数:出力データ)
0373デフォルトの名無しさん2015/02/07(土) 08:07:29.99ID:0QjeMX7S
言ってることは間違っていないんだからもっと肩の力抜いて行こうぜ
0374デフォルトの名無しさん2015/02/07(土) 08:18:10.07ID:2PYtlFBn
>>373
睡眠時間足りなくないか?
0375デフォルトの名無しさん2015/02/07(土) 08:23:41.74ID:0QjeMX7S
そうか?働いていれば6時間くらいなら普通の範疇だと思うが
0376デフォルトの名無しさん2015/02/07(土) 08:38:47.99ID:2PYtlFBn
そろそろ>>368が何を言わせたかったのか教えてもらいたい
0377デフォルトの名無しさん2015/02/07(土) 08:53:35.23ID:0QjeMX7S
>>371の方法で行うとして、それをどう組むかってことだろうな。
だからクラスやら関数やらって持って回った言い方してるんだろう。
0378デフォルトの名無しさん2015/02/07(土) 11:39:31.01ID:4S24w56C
構造体のような機能のTypeを使って
Type Person
Index As Integer
Name As String
Age As Integer


End Type
で定義。

そしてこれを
Dim Person(100) as Person
で使うとします。

PersonをAge順でソートしてその順番にIndexを1から順番に1,2,3,4,5・・・と代入するには
どうすればいいですか?
既存の機能みたいなのがあればいいのですが、なければ自作するしかないのかなと思ってますが。
0379デフォルトの名無しさん2015/02/07(土) 11:42:33.00ID:pGoj+FY2
>>338
規模による
ノンストップサーバーで常時動作するアプリなら丁寧に開放すべき
でもExcel VBAをそんな場面で使っちゃダメかと
0380デフォルトの名無しさん2015/02/07(土) 11:48:39.28ID:pGoj+FY2
>>378
そのパーソンのデータは元々何処に存在する?
DBならSQLでソートして取得、Excelシートならマクロでソートして取得する
VBAだけでやるなら通常のソート使う
0381デフォルトの名無しさん2015/02/07(土) 16:04:26.64ID:HrLZN6WD
グラフの元のデータの選択範囲を変更するときに
ActiveChart.SetSourceData Source:=Range("G1:G10") ならできたのですが
ActiveChart.SetSourceData Source:=Range(Cells(3, 3), Cells(N + 2, 3)) のように書くと

'cells' メソッドは失敗しました とエラーが出ます。後者の書き方はできないのでしょうか。
03823782015/02/07(土) 16:08:29.07ID:4S24w56C
>>380
説明を超簡単にするため仮にPersonの例を出しただけで実際は全く違うしかなり複雑なんです。
なので一般的に構造体のある1つの要素でソートしてその並んだ順に番号を振るという動作を実現したい。
(そりゃ上のPersonの例だと元のシートがありそうだからそこでソートしたら簡単だよね)

もし例えるなら
ある長文文書のカタカナだけを構造体KanaWordで取り出し
重複して取り出したカタカナ語をどうにかしたいからその出現回数でソートし
それについて連番をつけることによってName+Indexの組み合わせをユニークにしたいんです。
0383デフォルトの名無しさん2015/02/07(土) 16:28:12.16ID:L56gFTsW
>>381
N の値がおかしいんじゃないのか?
まずは、定数で試してみなよ
0384デフォルトの名無しさん2015/02/07(土) 17:01:06.53ID:HrLZN6WD
>>383
定数にしてもエラーになってしまいます(´・ω・`)
0385デフォルトの名無しさん2015/02/07(土) 17:42:17.05ID:HrLZN6WD
ぐぐっていたらこちらのサイトで解決策を見つけました。
http://www.excel.studio-kazu.jp/kw/20040602163036.html

シートを指定すればいいそうです。
(略):=Range(Sheets("2").Cells(3, 3), Sheets("2").Cells(N + 2, 3))

これだとエラー
(略):=Sheets("2").Range(Cells(3, 3), Cells(N + 2, 3))

バージョンはエクセル2003なのですが、新しいバージョンならシート指定しなくてもいいんですかね?
新規作成するときは :=Range(Cells(3, 3), Cells(N + 2, 3)) でいけたんですが
範囲を変更するにはシート指定しないといけないってちょっと面倒(´・ω・`)
0386デフォルトの名無しさん2015/02/07(土) 18:03:57.62ID:0QjeMX7S
>>382
自分でつくるか.Net化することを祈るしかないな
0387デフォルトの名無しさん2015/02/07(土) 18:12:47.55ID:0QjeMX7S
>>385
Withで前のRangeにも後ろのCellにも掛かるように書いておいた方がいいんじゃない?シートじゃなくブックごと。
0388デフォルトの名無しさん2015/02/07(土) 19:35:24.45ID:MiKLeMlV
>>382
VBAそのものにソート機能は無い

>>385
そのコードが書かれていたモジュールによってどのシート見るか変わる
指定しなければ動かないというわけではないが
解らないなら全部シート指定しといたほうが無難だぞ
0389デフォルトの名無しさん2015/02/07(土) 19:44:32.51ID:HrLZN6WD
>>387>>388
ありがとうございます。
指定してやります。
0390デフォルトの名無しさん2015/02/08(日) 11:27:49.95ID:7++NHH4w
>>382
それだと最初に取り出す時に正規化で抜けそうやね
で、構造体の要素に比較格納すれば同時にカウントもできる
0391デフォルトの名無しさん2015/02/09(月) 08:30:34.40ID:+ZaMOdKK
>>382
あなたの言ってることは構造体の列にランキングを付けたいということだけど、実際に並べかえたいのか、ランキング付けだけでいいのか。
0392デフォルトの名無しさん2015/02/10(火) 21:06:45.70ID:v+Odw02j
最近VBAで何かを楽しようっていうネタがなくなってきた
作りきってしまった感がある
VBAで組んで初めて人に褒められた時は超楽しかったはずなのに…
0393デフォルトの名無しさん2015/02/10(火) 23:01:15.47ID:REXxw1bP
>>392
ゲームでも作ったらみんな驚くぞ
まずはテトリスあたりが簡単そうだな
ゲームプログラミングがキッカケで新しいネタ思いつくかも
このゲームのこの処理はあの業務の改善にも応用できるぞ、とか
0394デフォルトの名無しさん2015/02/10(火) 23:32:09.67ID:QamkDOo/
>>392
今までどんなの作った?
0395デフォルトの名無しさん2015/02/11(水) 02:18:59.86ID:WrS2F/u8
>>392
多分もう次のステップに進む時期が来てるんだよ。

一度Object指向言語やってからまたVBAやってみると、今までの組み方とまた全然違う
組み方で組めるようになるし、より効率のいい方法をチョイス出来るようになる。

>>393
そう思ってテトリスやアクションゲーム作った時期があったけど、あまり業務には繋がらなかったかな。
座標計算がおもだし、APIも業務で使うAPIとは毛色が違うし。
03963922015/02/11(水) 04:25:38.05ID:OQ+aNcDd
>>394
今までは以下のことをしてました。
・DB(Access)やcsvから必要なデータを抽出・集計して目的の資料(工程表、請求書、クレーム管理表、csv)をワンボタンで作る機能
(DBはDAOやADOで接続)
・入力フォームがあるExcelやcsvからDBにデータを格納する機能
・AccessVBAで、更新クエリを連続で行い、基幹システムのデータベースサーバーのデータを抽出
・社内にあるNASの容量監視
・OutlookVBAで誤送信防止や重すぎるファイルを送ってないかのチェック機能
・メールアドレス一覧表を送って、選択したメールアドレスをOutlookの連絡先に追加、削除する機能
・VBScript、VB.NETを使った営業所間のファイルコピーバッチ処理

こう見ると、随分officeとvbに毒されてるなぁ、スレ違いの内容も多々ありますね…
IE・HTML操作はしたことないですけど、活用されてる方っていますか?
0397デフォルトの名無しさん2015/02/11(水) 07:11:39.99ID:WrS2F/u8
>>396
あー、VBAじゃ確かにWebのサイトやページ見に行くことはあってもそれらを構成して扱うようなことはしないからなぁ。

そっちに興味があるならVB.Netの経験あるみたいだし、ASP.Netやってみれば?

HTMLやJavaScript、IISとかの知識が必要になるけど、あの辺はまぁSQLとかみたいに
最初でもその場凌ぎでそこそこ何とかなるもんだし。
0398デフォルトの名無しさん2015/02/11(水) 13:36:28.94ID:qmuMcExT
ゲームのレベルがカンストしてやることなくなったみたいw
リアルでカンストってすごいじゃんw
0399デフォルトの名無しさん2015/02/11(水) 23:58:32.19ID:GkIWFUyF
転職すればまたやりたい事沢山出てくるんじゃね?
0400デフォルトの名無しさん2015/02/12(木) 15:34:43.50ID:Qj2+qwXZ
100名程度の利用者を想定して入力システムを作っているのですが、
画面サイズ(フォームのウィンドウサイズ)をどうするか悩んでいます

それぞれ違うPCであるので、機種により解像度はバラバラで最適なフォームのサイズを決めるのは
無理だとは思うのですが、基本的なサイズ(割と出回ってるPCを想定して)はどの程度でしょうか?
Windowサイズを取得してそれにあわせて調整する手法もあるようですが、
無難なサイズで決め打ちするとしたらどれくらいのウィンドウサイズが限界でしょうか

いまのところ幅800高さ600程度で作っており、あとはFormプロパティのZoomを使って
利用者が好きなサイズに調整してもらう(システム設定などを設けて)のが良いかなとおもってるのですが
0401デフォルトの名無しさん2015/02/12(木) 17:08:34.82ID:HJuTvgcS
時代はHD(`・ω・´) シャキーン
0402デフォルトの名無しさん2015/02/12(木) 20:34:11.54ID:UIrtzQjf
価格コムあたりでディスプレイサイズを検索したら?
大体の規格は決まっているんだから。
0403デフォルトの名無しさん2015/02/12(木) 21:55:05.40ID:JYibxDvk
>幅800高さ600程度

それくらいなら大丈夫だろ。
んで、コントロールを詰め込みたいならマルチページで(使い勝手がどうなるかは知らんけど)
0404デフォルトの名無しさん2015/02/12(木) 22:42:46.58ID:0MvvafYQ
俺が知らん間に高DPIディスプレイって結構普及してるのか?
0405デフォルトの名無しさん2015/02/12(木) 23:21:06.49ID:yvPuD0M1
この前電気屋でノートPC見たら4K15インチとか割と普通にあった
対応アプリ少ないし情弱ホイホイだよね
0406デフォルトの名無しさん2015/02/13(金) 00:18:41.02ID:WPkK2771
質問お願いします。
正規表現にて下記パターンのテーブルデータを抜き出したいのですが、
どのように修正すればよいでしょうか?


//抜き出したいパターン
<td class="tal">2007年12月14日</td>
<td>0.48倍</td>
<td>86.47倍</td>
<td>2.20倍</td>
<td>2.41%</td>
<td>380.0円</td>
<td>316.6円</td>
//抜き出したいパターンここまで

正規表現は以下の通りです。

.Pattern = _
">(\d{4})年(\d?\d)月(\d?\d)日<[\s\S]+?" & _
">([0-9,.\-]+)倍<[\s\S]+?" & _
">([0-9,.\-]+)倍<[\s\S]+?" & _
">([0-9,.\-]+)倍<[\s\S]+?" & _
">([0-9,.]+)%<[\s\S]+?" & _
">([0-9,.]+)円<[\s\S]+?" & _
">([0-9,.]+)円<[\s\S]{7,30}?"
0407デフォルトの名無しさん2015/02/13(金) 00:19:56.57ID:WPkK2771
下記のようなパターンが抽出されて困ってしまいます。(途中省略しています)

//不本意に抜き出されるパターン

 <td class="tal">2015年01月13日</td>
<td>207.0円</td>
<td>207.0円</td>
<td>206.0円</td>
<td>206.0円</td>
<td>206.0円</td>
<td>7,800株</td>

//途中省略

<td class="tal">2007年12月14日</td>
<td>0.48倍</td>
<td>86.47倍</td>
<td>2.20倍</td>
<td>2.41%</td>
<td>380.0円</td>
<td>316.6円</td>

//不本意に抜き出されるパターンここまで
04084002015/02/13(金) 00:56:40.40ID:88+vWfY0
皆様レスどうもです
HDが結構多いようですね
高さ1024、幅を768の解像度を最低ラインにおいて表示しきれるサイズに設定
あとは拡大で対応することにしました
環境依存かはわからないのですが、どうもZoom使うと縮小で文字がつぶれやすく
拡大ならあまり違和感がないように思えるので・・・
0409デフォルトの名無しさん2015/02/13(金) 01:33:27.21ID:h7QHBloi
>>407
タグを、<[^>]+>に変えりゃいいだけじゃね?
0410デフォルトの名無しさん2015/02/13(金) 01:53:27.97ID:HSv1A/XD
★2 ExcelのVBA以外の部分に関する質問はNGです。
0411デフォルトの名無しさん2015/02/13(金) 17:25:45.77ID:oMBvQyXe
>>410
はいざんねーん

Excel VBA 質問スレ Part36 [転載禁止]©2ch.net
http://peace.2ch.net/test/read.cgi/tech/1419718732/l50
0412デフォルトの名無しさん2015/02/13(金) 22:42:05.64ID:WPkK2771
>>409
ありがとうございました。自己解決いたしました。
0413デフォルトの名無しさん2015/02/13(金) 22:55:29.57ID:9Fk2rE3h
教えてもらって解決したのは自己解決とは言わんて w
0414デフォルトの名無しさん2015/02/14(土) 00:18:12.33ID:QDZ5YXBX
今日はバレンタインデーなので
彼女が出来てチョコが貰えるような
プログラムを教えてください
0415デフォルトの名無しさん2015/02/14(土) 07:40:45.98ID:KHQ6ogQm
>>414
ネタにマジレスしちゃうが
以前Excel教えたのがきっかけで告られた

自分が教えられるレベルになるのが早道
0416デフォルトの名無しさん2015/02/14(土) 18:06:45.77ID:ftV3bqT6
xlsmでフォームを利用した入力システムを作成しており、xlsでもエラーが出ないように修正したところ、
xlsだと明らかに動作が遅く、容量もでかくなってしまいました

組織内のある程度の人数に配布して使うこと予定していますが、office2003にも対応させるためxlsで配布すべきでしょうか?
XPもOffice2003もサポート終了しているので、2007以降の使用推奨でxlsmでいってもよいものでしょうか

1.xlsmで配布し、office2003(XPでは使用しないよう指導しているため)はおそらく少ないので、起動しなかったものにのみ
互換のパッチをインストール入れるよう指導 (互換パックで果たして問題がでないか)
2.xlsで当分配布し続ける (大勢の2007以降のユーザが重くなる・・・)
3.xlsmとxlsの両バージョンを作成して配布する (修正漏れや手間の増大)

素人考えでは1でいいかと思っているのですが、皆様のご意見をお聞かせ下さいませ
0417デフォルトの名無しさん2015/02/14(土) 18:30:19.00ID:7Vd0Rb/A
組織の問題をここで解決しちゃて良いのか?
貴方の所属している部署で話し合って解決すべき問題じゃないのか?
0418デフォルトの名無しさん2015/02/14(土) 19:00:02.61ID:V3WmF4i9
つか、まずxlsmをxlsにすると遅くなるってのが本当なのか?
動くかどうか知らんが、互換パックで2003でxlsm動かしたら遅くないのか?
そのへんまずちゃんと調べるべきじゃないかね

ファイルサイズは圧縮の問題もあるからxlsの方が大きいのは解るが
そのファイルサイズ差で読込の時間差が体感できるほどでかいのか
0419デフォルトの名無しさん2015/02/14(土) 19:01:32.41ID:ftV3bqT6
>>417
使う状況はそれぞれ個人のPCで、あくまでもお助けツールに配るものです
使う対象者も、officeのバージョンと言われて??となるものがほとんどです

そもそもPCに触ることが少ない業種で、私が日曜大工的につくってるので協議自体きびしいので
企業のプロの皆様がどのように協議されて仕様を決めていらっしゃるのかをお聞きしたいところなのです
0420デフォルトの名無しさん2015/02/14(土) 19:05:06.75ID:ftV3bqT6
>>418
一番重く感じるのは保存のときです
xlsmではほぼ一瞬で保存できるのですが、xlsでは5秒ほどかかります
保存のコードもWorkbookをSaveさせてるだけでごくごく単純なモノです
0421デフォルトの名無しさん2015/02/14(土) 19:21:07.27ID:7Vd0Rb/A
自分で決めてしまっていいんだったら1でしょ。それで2007以前の使用者には
2007以降が動作しているPCで入力させるようにする
開発するのは2007以降のExcelのみ

「PCに触ることが少ない業種」というのなら、それでも大丈夫なんじゃ?

とにかく3の両方のバージョンで開発…ってのはやるべきじゃないよ。
■ このスレッドは過去ログ倉庫に格納されています