[表示 : 全て 最新50 1-99 101- 201- 301- 401- 501- 601- 701- 801- 901- 2chのread.cgiへ]
Update time : 12/27 15:50 / Filesize : 259 KB / Number-of Response : 921
[このスレッドの書き込みを削除する]
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧] [類似スレッド一覧]


↑キャッシュ検索、類似スレ動作を修正しました、ご迷惑をお掛けしました

Excel VBA質問スレ Part9



1 名前:デフォルトの名無しさん mailto:sage [2008/12/04(木) 15:42:51 ]
ExcelのVBAに関する質問スレです

前スレ pc11.2ch.net/test/read.cgi/tech/1219673793/

★1 質問テンプレ(雛形)は用意しませんが、OSとExcelのバージョンは必ず書きましょう。

★2 ExcelのVBA以外の部分に関する質問はNGです。
   但し、VBA無しでも出来ることだが、あえてVBAでやりたいって物に関してはOK。

★3 ExcelのVBE(Visual Basic Editor)を使うとしても、VBAの分野以外に関してはスレ違いです。
   
 VBAとは、『Visual Basic for Application』の略で
  Application
  ├Workbooks
  |└Workbook
  |  ├Worksheets
  |  |└Worksheet
 というApplication以下のオブジェクトを、VB言語で操作するものを指します。 
 例えExcel付属のVBE(Visual Basic Editor)を利用しようとも、このApplication以下のブックやシート、
 セルやオブジェクト等を操作するもの以外はVBA分野の話ではないので、ここでは聞かないでください。

★4 とりあえず、Excelのインスタンスを作らずにVB6で出来ることは全てスレ違いだと思ってください。

★5 レベルはどうあれ、ここはプログラマ用の板スレです。プログラマとは、自分でプログラムを組み
   コードを書く人の事なので、自分でやるきは全く無く、丸投げしようって人はお断りです。
   ヒントを貰えばあとは自力でなんとかしますって人のみどうぞ。

★6 わからなければとりあえず「マクロの記録」(Alt, T, M, R)


355 名前:デフォルトの名無しさん mailto:sage [2009/01/03(土) 16:20:56 ]
V2C には6回クリックまであるぜ

356 名前:デフォルトの名無しさん mailto:sage [2009/01/03(土) 17:11:00 ]
API使えば、ダブルクリックの認識の間隔を取得できるから、
0.5秒決め打ちよりそれを使ったほうがいいと思う。
そういう話をしている場合でないとは思いつつ。

357 名前:デフォルトの名無しさん [2009/01/03(土) 19:44:02 ]
質問です。
セル上で、右クリックをすると、編集ダイアログ?が出てくるのを出ないようにしたいのですが
どう設定のマクロを書いたものか、よろしく。
右クリックイベントによってコピーモードにしているのに、余分な作業を
するのを防止したいので。

358 名前:デフォルトの名無しさん mailto:sage [2009/01/03(土) 21:18:27 ]
マウスの右ボタンを殺す

359 名前:デフォルトの名無しさん mailto:sage [2009/01/04(日) 02:39:56 ]
BeforeRightClickイベントの第二引数にCancelがあるだろ

360 名前:デフォルトの名無しさん mailto:sage [2009/01/04(日) 13:15:18 ]
サーバサイドでの帳票の生成にVBAを検討していて、
安定性、処理性能、MSのライセンス違反等を懸念してますが、
何か懸念事項やアドバイス等ありますでしょうか?

361 名前:デフォルトの名無しさん [2009/01/04(日) 14:49:46 ]
論理で「Aでないか、Bでないか、Cでない」ならの類なのですが、

列5 列6 列9なら、イベント処理し、「そうでないなら」、exitする の

「そうでないなら」はどう書いたものでしょうか?


362 名前:デフォルトの名無しさん mailto:sage [2009/01/04(日) 15:11:17 ]
>>361
色々あるだろうけど
普通は
if
elseif
elseif
else



363 名前:デフォルトの名無しさん mailto:sage [2009/01/04(日) 15:18:49 ]
>>357
ワークブックのSheetBeforeRightClickイベントでcancel=trueにしないとだめだよ



364 名前:デフォルトの名無しさん mailto:sage [2009/01/04(日) 15:21:38 ]
>>361
>>362だとイベント処理のコードが重複するから
If 列5 Or 列6 Or 列9 Then
イベント処理
Else
Exit
EndIf

365 名前:デフォルトの名無しさん mailto:sage [2009/01/04(日) 23:41:35 ]
まあOr使っちゃうのが一般的かつ簡単ではあるが
条件1つずつでネストした方が速い

何故なら、例えば列5に一致するならイベント処理は行うので
列6、列9に一致するか否かは判定する必要が無いのに
>>364では毎回全てを判定した上で論理演算してしまう
複数条件でAnd、Orを使わないのは、コード最適化の常套手段

逆に速度気にせず手を抜きたいなら、カンマ区切りで
複数条件指定できるSelect Case使う方がお手軽だろ
Case 列5, 列6, 列9
  イベント処理
Case Else
  Exit

因みに論理演算(>>364)の処理時間を100とするなら、Ifのネストは70、Select Caseは105くらいだ
とは言え最近のPCなら、ループで何十、何百、何千万回とやってコンマ何秒かの差が出る程度だけどな

366 名前:デフォルトの名無しさん mailto:sage [2009/01/04(日) 23:56:00 ]
あれ?
VBって or で連結させた場合、順次判定して、hitしたら後の判定スキップじゃなかったっけ。
勘違いだったらごめん。

367 名前:デフォルトの名無しさん mailto:sage [2009/01/05(月) 00:00:55 ]
ショートサーキットはしないよ
まあ,とりあえず素直に書いといて最適化は実際に支障が出てから,が基本だけど

368 名前:デフォルトの名無しさん mailto:sage [2009/01/05(月) 12:09:49 ]
>>365
Select Caseが105って一概には言えないだろ?
>Case 列5, 列6, 列9
これショートサーキットだから列5がTrueなら列6と列9は評価しないし。
>>366
ショートサーキットするのはVB.NetのOrElseとかAndAlso
今はVB.Netって言わないんdっけ?


369 名前:デフォルトの名無しさん mailto:sage [2009/01/05(月) 13:14:41 ]
>>368
Select Caseが105ってのは、実際にカウンタ変数のMod 10に対する
条件分岐のみのループの処理時間を計った結果
それぞれ500万回*3回の平均から算出した値

そもそもが単一条件の場合でも、Select CaseはIfより遅いからね

370 名前:デフォルトの名無しさん mailto:sage [2009/01/05(月) 14:13:14 ]
セル、グラフ、フォーム等の情報を利用してフォーム形成することはできますか?
例えば
名前 値 ラジオボタン
という行が連なるフォームを作る場合、
グラフの凡例数、セルの列数、フォームで入力した数分等、行が作成される感じにしたいのですが。
(フォームの大きさに入りきらない場合はスクロールバーを出す)

371 名前:デフォルトの名無しさん mailto:sage [2009/01/05(月) 14:19:16 ]
ユーザーフォーム上のコントロールを動的に生成したいってことなら出来るよ

372 名前:デフォルトの名無しさん mailto:sage [2009/01/05(月) 14:22:53 ]
>>371
調べ方が足りませんでした。すみません。 VBA 可変 フォームとかぐぐってました。
コントロール 動的 VBAでぐぐったらできそうな感じです。
ありがとうございました。

373 名前:デフォルトの名無しさん mailto:sage [2009/01/05(月) 18:24:45 ]
>>369
IfやELseIfのネストより遅いのは確かだが、Orより遅いわけねーって。
実測してみろよ。
Private Declare Function timeGetTime Lib "winmm.dll" () As Long
Sub foo1()
  Dim i&, t1&, t2&
  t1 = timeGetTime
  For i = 1 To 5000000
    Select Case i Mod 10
      Case 5, 6, 9
      Case Else
    End Select
  Next
  t2 = timeGetTime
  MsgBox t2 - t1
End Sub
Sub foo2()
  Dim i&, j&, t1&, t2&
  t1 = timeGetTime
  For i = 1 To 5000000
    j = i Mod 10
    If j = 5 Or j = 6 Or j = 9 Then
    Else
    End If
  Next
  t2 = timeGetTime
  MsgBox t2 - t1
End Sub
foo1がショートサーキットだって知らなかったんじゃないの?
なんなら実証してみせるが、やり方くらい知ってるよな。



374 名前:デフォルトの名無しさん mailto:sage [2009/01/05(月) 19:51:47 ]
>>373
・timeGetTimeではなく組込のTimerを使ったこと
・Select Caseでも平等にするためにi Mod 10の結果を変数に取っていること
・結果をMsgBoxではなくDebug.Printで出力したこと
以外は同じコードだよ

ちなみに実証方法は知ってる
Select Caseがカンマ区切りがショートサーキットなのは知ってるからわざわざ
Select Caseでやったことは無いが、デバッグの一手法でもあるからな

375 名前:373 mailto:sage [2009/01/05(月) 21:26:44 ]
>>374
i Mod 10の値を処理で使わないんなら>>373が平等なコード。
仮にfoo1でi Mod 10を変数にとってもfoo1が速いぞ?
おめーんとこじゃ遅いのか?

376 名前:デフォルトの名無しさん mailto:sage [2009/01/05(月) 21:35:16 ]
> i Mod 10の値を処理で使わないんなら>>373が平等なコード。
そうでもない

> おめーんとこじゃ遅いのか?
うん

377 名前:373 mailto:sage [2009/01/05(月) 21:40:10 ]
OrもSelect Caseもお互いに速さでベストをつくせばそうなるじゃん。
おまえは最速のコード書けないんだろ?


378 名前:373 mailto:sage [2009/01/05(月) 21:41:57 ]
後ろは読んでなかったが、おれのとこと逆になるらしいな。
俺のとこはSelect Caseが速い。

379 名前:デフォルトの名無しさん mailto:sage [2009/01/05(月) 22:00:24 ]
実際の処理に置いて必ずModで算出した値を使うというわけではない以上
条件分岐のステートメントに入る前の時点で、条件となる値が変数に代入されているという
同じ状況を作ることが平等になる

Modを使う場合に限定して、IfとSelect Caseのどちらを使った方が速いかを検証するなら、
君の言うとおりベストを尽くして最速コードを書くべきだけどね

380 名前:デフォルトの名無しさん mailto:sage [2009/01/05(月) 22:12:28 ]
なんか分かってないなぁ。
Modで算出した値を使わないなら>>373になるんだよ。
まぁどこまで行っても平行線だからもういいが、他のやつらはどっちが速いんだろ?
まぁ速さなんて俺はどっちでもいいけどな。
このような使い方なら普通の美意識を持ってたらSelect Caseだし。


381 名前:デフォルトの名無しさん mailto:sage [2009/01/05(月) 22:19:50 ]
>>380
foo1が速かった

382 名前:デフォルトの名無しさん mailto:sage [2009/01/05(月) 22:24:07 ]
>>381
トンクス
j = i Mod 10
Select Case j
としても?

おれのとこはそれでもfoo1が速いが。

383 名前:デフォルトの名無しさん mailto:sage [2009/01/05(月) 22:26:51 ]
>>382
逆転した



384 名前:デフォルトの名無しさん mailto:sage [2009/01/05(月) 22:31:23 ]
>>383
ふーん、俺のとこと違うな。
まさかjを変数宣言してないとかじゃないよな?

385 名前:デフォルトの名無しさん mailto:sage [2009/01/05(月) 22:33:56 ]
>>384
してなかった

したら差は縮まったけどまだ
foo2が速い

386 名前:デフォルトの名無しさん mailto:sage [2009/01/05(月) 22:35:45 ]
>>385
おいおい、しっかりしてくれよ。
jをLong型で宣言したらそうなるか教えてくれ。

387 名前:デフォルトの名無しさん mailto:sage [2009/01/05(月) 22:36:45 ]
すまん、また後ろ読んでなかった。

388 名前:デフォルトの名無しさん mailto:sage [2009/01/05(月) 22:41:46 ]
>>386
&で宣言したよ
30位foo2が速い

389 名前:デフォルトの名無しさん mailto:sage [2009/01/05(月) 22:42:49 ]
まぁModで算出した値を使わないなら>>373が平等な比較だが、とりあえず変数に代入したら
人によっては違うということは分かった。
ちなみに俺はWindows xp とExcel2007だ。

390 名前:デフォルトの名無しさん mailto:sage [2009/01/05(月) 22:44:22 ]
ちなみに
Excel2002です

391 名前:デフォルトの名無しさん mailto:sage [2009/01/05(月) 22:47:06 ]
>>390
トンクス。

392 名前:361 [2009/01/05(月) 23:18:31 ]
>論理で「Aでないか、Bでないか、Cでない」ならの類なのですが、
>列5 列6 列9なら、イベント処理し、「そうでないなら」、exitする の
>「そうでないなら」はどう書いたものでしょうか?
訊き方が悪かったみたいですね。結局、次のこれで、希望する動きをしています。

If Not (Target.Column = 5) And Not (Target.Column = 6) And Not (Target.Column = 9) Then Exit Sub


393 名前:デフォルトの名無しさん [2009/01/06(火) 00:21:36 ]
文章だけだと伝わりづらいと思いますが、質問です。


ハイパーリンク │ 転記情報1
ハイパーリンク │ 転記情報2

EXCELシートの一覧表に上のようにハイパーリンクが張られた一列を作り、
それをWEBブラウザでプレビューできるようにしています。

WEBブラウザ上のリンクをクリックすると、
新しくEXCELシートを呼び出し、
クリックした行の情報(一番上のハイパーリンクをクリックしたなら転記情報1)を
呼び出したシートに転記する処理を作りたいと思っています。
EXCELシートならリンクをクリックすると同時にそのセルがアクティブになるので同行の情報も簡単に転記できそうですが、
WEBブラウザ上でもこれと同じような情報転記は可能でしょうか?




394 名前:デフォルトの名無しさん mailto:sage [2009/01/06(火) 03:38:21 ]
>>392
背中がムズムズする……

395 名前:デフォルトの名無しさん mailto:sage [2009/01/06(火) 05:39:55 ]
>>394
気持ちは解る
条件式にnotと=を併用するヤツってもうね…

396 名前:デフォルトの名無しさん mailto:sage [2009/01/06(火) 07:33:05 ]
<>

397 名前:デフォルトの名無しさん mailto:sage [2009/01/06(火) 09:47:49 ]
>>392
「Aでないか、Bでないか、Cでない」ではなく「Aでもなく、Bでもなく、Cでもない」だろ?
前者だと必ずTrueだからな。
それは置いといて、普通イベント処理ならIntersect使うから列番号では判定しないが、どうしても列番号で判定したいとか基本のお勉強なら
Select Case Trget.Column
  Case 5, 6, 9
    '処理1
  Case Else
    Exit Sub
End Select
’処理2

処理2がなければ、何もわざわざCase Elseで抜ける必要なし。
というか抜ける記述は普通はしない。

398 名前:デフォルトの名無しさん mailto:sage [2009/01/06(火) 09:49:54 ]
何、今更?

399 名前:デフォルトの名無しさん mailto:sage [2009/01/06(火) 09:59:59 ]
>>392
書き忘れたがTarget.Columnを三度も取得しちゃいかん。
どうしてもAndとかOrを使うんなら、いったん変数に取得してから判定するんだな。

400 名前:デフォルトの名無しさん mailto:sage [2009/01/06(火) 10:02:35 ]
>>398
昨晩のアフォの>>365か?
無視してすまんね。

401 名前:デフォルトの名無しさん mailto:sage [2009/01/06(火) 10:29:05 ]
悔しかったの?

402 名前:デフォルトの名無しさん mailto:sage [2009/01/06(火) 10:30:29 ]
シートに商品名が20,000件程度入力されている状態で
テキストボックスに商品名の一部を入力⇒キーワードが含まれるセルのデータを
リストボックスに追加 という処理を考えていたのですが
下記の方法で試してみるとかなり時間がかかってしまいます
高速に処理をさせるには根本的な方法の見直しが必要でしょうか?

 dSelectForm.ListBox1.Clear
 LastRow = Sheet1.Range("C65536").End(xlUp).Row
 For i = 2 to LastRow
  Ans = 0
  Ans = WorksheetFunction.Find(inputKey, Sheet1.Cells(i, 3))
  If Ans <> 0 Then
   dSelectForm.ListBox1.AddItem Sheet1.Cells(i, 3)
  End If
 Next

403 名前:デフォルトの名無しさん mailto:sage [2009/01/06(火) 10:59:47 ]
相変わらずの人がいるなw



404 名前:デフォルトの名無しさん mailto:sage [2009/01/06(火) 11:20:39 ]
>>402
ループのお勉強なら基本的には配列の勉強かな?
データ範囲を2次元配列に取得して回すとか、AddItemは遅いから1次元配列にため込んでListプロパティで設定するとか。
WorksheetFunction.FindじゃなくInStr使うとか。
たしかExcel2000以降ならFilter関数が簡単。
WorksheetFunction.Transpose(範囲)で1次元配列を取得して、Filter関数にかけてからListプロパティで設定。

405 名前:デフォルトの名無しさん mailto:sage [2009/01/06(火) 16:29:31 ]
イベント処理だし元の質問からも判断してわざわざExitで抜けるようなコードは必要ないと思う。
条件に「合う」場合だけ判定して処理するように書くのが普通だね。

定番はIfだけど質問者のレベルから考えてコンマ何秒の速度差を考える必要はないと思うし
見た目のわかりやすさと保守のしやすさからCaseをすすめとく。
条件が増えたときに簡単に数字が追加できるから。

406 名前:デフォルトの名無しさん mailto:sage [2009/01/07(水) 01:50:36 ]
2008年1月2日を08.01.02と表記してるセルを計算に使う方法ってありますか?
08.01.02と表記されたセルから08.01.01と表記されたセルを引くと1という答えが算出される処理を作りたいです。

407 名前:デフォルトの名無しさん mailto:sage [2009/01/07(水) 03:34:54 ]
>>406
セルの表示形式で「yy.mm.dd」

408 名前:デフォルトの名無しさん mailto:sage [2009/01/07(水) 05:57:34 ]
>>405
俺は誰かみたいに「何、今更?」なんて言わんが、そのような条件が三つ以上でIfステートメントでOr判定するくらいなら
Select Caseステートメントの方が速いし分かりやすいし定番だと思うよ。
あと知らなくていいことだが、Select CaseステートメントでCase Elseとか、If ThenステートメントでElseとかは
何もそこで処理しなくても書いた方が速くなるね。
まぁ俺は書かないけど。

409 名前:デフォルトの名無しさん mailto:sage [2009/01/07(水) 06:18:38 ]
>>406
数式でよけれべ普通に=A1-B1なんてやりゃできる。
もし表示形式が日付形式になるようなら、G/標準とか0にすりゃいい。
2007では計算元の表示形式が日付でも普通に1になるが、たしか2003では数式セルは日付にならなかったっけ?

計算元の表示形式が文字列で、VBAでやりたいのなら
MsgBox CDate(Cells(1,1).Value)-CDate(Cells(1,2).Value)
MsgBox DateValue(Cells(1,1).Value)-DateValue(Cells(1,2).Value)
などとやりゃできないか?

410 名前:デフォルトの名無しさん mailto:sage [2009/01/07(水) 07:26:12 ]
if not hoge is nothing then

って構文が気持ち悪いんですけど、何か代替えはありませんか?

411 名前:デフォルトの名無しさん mailto:sage [2009/01/07(水) 07:53:25 ]
そんなこといったらVBAなんて気持ち悪い構文だらけですが何か?

412 名前:デフォルトの名無しさん mailto:sage [2009/01/07(水) 08:23:23 ]
「代替え」なんて変な言葉を使う人に言われたくありません。
もしかして、「代替」を「だいがえ」って読んじゃう頭の弱い人やそれらに無意識に迎合しちゃう人ですか?

413 名前:デフォルトの名無しさん mailto:sage [2009/01/07(水) 08:34:53 ]
>>410
If ObjPtr(hoge) <> 0 thenでよくね?
俺はこんなことしないけどね。



414 名前:デフォルトの名無しさん mailto:sage [2009/01/07(水) 10:38:45 ]
それならもっとシンプルにできる
If ObjPtr(hoge) Then
こういう書き方を知らないと意味がわからなくなるけど

415 名前:デフォルトの名無しさん mailto:sage [2009/01/07(水) 12:12:25 ]
>>412
ttp://dictionary.goo.ne.jp/search.php?kind=jn&MT=%C2%E5%C2%D8%A4%A8


416 名前:デフォルトの名無しさん mailto:sage [2009/01/07(水) 12:25:38 ]
not 〜 nothingは俺も気持ち悪いと思う
直訳すると「ないアルよ」みたいな回りくどい二重否定の表現って
英語だと普通に出てくるから設計者は何の疑問も持たなかったんだろうなあ

俺もまだVBAを勉強中だから知らないだけかもしれないけど、
インスタンス化されてることを、いちいち論理を反転しなくても直接判定できるような
構文か関数ってないの?自分で作るしかない?

417 名前:デフォルトの名無しさん mailto:sage [2009/01/07(水) 16:19:22 ]
別にこの仕様でおかしくもないと思うけどねぇ
そもそもがNothingのときに何かをするってことの方が多いんだからさ
有ることと無いこと、両方とも否定文を使わずに判定出来るのが一番かもしれないが
どちらかのみと言うなら、無いことを判定する方法を用意すべきだろ

418 名前:デフォルトの名無しさん mailto:sage [2009/01/07(水) 17:08:30 ]
if hoge is not nothingと書けるのが一番良い

419 名前:デフォルトの名無しさん mailto:sage [2009/01/07(水) 17:21:50 ]
余計変だw

420 名前:デフォルトの名無しさん mailto:sage [2009/01/07(水) 18:39:23 ]
>>415
変な言葉が定着しつつあることはその引用で判るが、それで何が言いたいの?
# 頭使うことを知らない人は、自分で考えることを放棄するから困る。

421 名前:デフォルトの名無しさん mailto:sage [2009/01/07(水) 18:42:58 ]
いっそのこと
If hoge = Nothing
If hoge <> Nothing
でいいじゃん。
なんだよ突然Isって。わざわざ演算子を使い分ける妙なこだわりが理解できん。桂正和マニアかよ。

422 名前:デフォルトの名無しさん mailto:sage [2009/01/07(水) 19:10:25 ]
代替〜(ダイタイ〜)
の同音異義語が有る場合などに
代替え〜(ダイガエ〜)
と重箱読み使うのは昔からあること

変な言葉でもなければ、最近になって定着しつつあるのではなく以前からあったもの
件の場合は重箱読み使うのが適切と言える状況ではないが、誤用や間違いではない
"代替"の意味で"代変え"を使っているなら完全な誤用だけどね

そもそも、言葉というのは変化していくもの
最近になって定着しつつあるのだとしても、それを頭ごなしに否定するのは愚かしい
頭使うことを知らない人は、誤用と変化の違いを見極めることなく
自分の中の古い知識だけで物事を断定しがちだが、もっと柔軟な頭と広い視野を持たないと困るよ

423 名前:デフォルトの名無しさん mailto:sage [2009/01/07(水) 19:32:33 ]
AndAlsoやOrElseってVBAには無いんだったっけ?



424 名前:デフォルトの名無しさん mailto:sage [2009/01/07(水) 19:50:59 ]
>>412
いや、”だいがえ”が正しいんじゃないかな。
もしかして”だいがい”って呼んでるの?

425 名前:デフォルトの名無しさん mailto:sage [2009/01/07(水) 19:54:09 ]
CやJavaが長年培ってきた洗練された構文をかなぐり捨ててVBはいったいなにがしたかったのだろう。
なぜ}のかわりにEndと入力しないといけないのか理解に苦しむ。
見やすくない上に3文字も打たないといけない。ばっかじゃないか?

426 名前:デフォルトの名無しさん mailto:sage [2009/01/07(水) 19:55:49 ]
馬鹿発見。「だいたい」と読むのだよ。つーか、>422に書いてあるだろ。

427 名前:デフォルトの名無しさん mailto:sage [2009/01/07(水) 19:56:12 ]
いやいや、オリジナルのBASICはCより古いぞ。
その古臭い構文をVBも引きずっているというだけ。
だからこそBasicを名乗っているわけだが。

428 名前:デフォルトの名無しさん mailto:sage [2009/01/07(水) 19:56:28 ]
>>425
CやJavaとbasicはどっちが古いと思っているのかね。

429 名前:デフォルトの名無しさん mailto:sage [2009/01/07(水) 20:00:04 ]
オリジナルのベーシックと今のVBはかなり違うじゃん。
古いベーシックから新しいVBになるにあたって
CやJavaで解決されている構文を見習えばよかったのだ。


430 名前:デフォルトの名無しさん mailto:sage [2009/01/07(水) 20:00:56 ]
C#でも使ってろ。

431 名前:デフォルトの名無しさん mailto:sage [2009/01/07(水) 20:05:32 ]
>>430
エクセルのマクロでC#って使えるの?

432 名前:デフォルトの名無しさん mailto:sage [2009/01/07(水) 20:06:30 ]
それよりなんでキーワードの先頭は大文字なんだろう
目がチカチカする
小文字ならまだメリハリが出て読みやすいと思う

433 名前:デフォルトの名無しさん [2009/01/07(水) 20:12:55 ]
エクセルのセルに入っている文字列の特定の文字の上にオートシェイプを置きたいって質問した人です。

質問させてください。

エクセルの現在のフォントでの文字列の幅を取得するには、

1.HWNDをNULLでデバイスコンテキストを取得する。
2.コンパチブルなDCをつくり、フォントをエクセルのフォントと同じものをセレクト。
3.GetTextExtentPoint32を呼び出して論理単位で文字列幅を得る。
4.(モードがMM_TEXTだと仮定して)ピクセルなので、ポイントに変換する。
  (DPIはGetDeviceCapで取得)
5.エクセルのシートのズームが80%なら0.8をかける

であっていますか?



434 名前:デフォルトの名無しさん mailto:sage [2009/01/07(水) 20:22:18 ]
>>429
VBが登場した頃は、まだパソコン用の高級言語の人気が
CとPascal(これはBegin〜Endって書く言語)で2分していて、
C系の構文が良いという評価が固まっていなかったのだと思う。

>>432
VB登場の少し時代は全部大文字だったから、そこからは進歩したと言えると思う。

435 名前:デフォルトの名無しさん mailto:sage [2009/01/07(水) 20:27:07 ]
変わったと言うより大幅に拡張されてるね。
根っこの部分はN-BASICの時代から変わってないから
昔覚えた変なテクニックが意外とそのまま使えたりするんだよな。
このあたりN-BASICやN88-BASICの記憶がないとなかなか同意してもらえないと思う。

例えばこんなNextの書き方、VBから始めた人は知らないんじゃないかな。

For i = 1 To 10
For j = 1 To 10
  (処理)
Next j, i

436 名前:デフォルトの名無しさん mailto:sage [2009/01/07(水) 20:31:28 ]
>>435
あったなぁ・・

そうだ、For文みて思い出したけど、VBは1からカウントするのが好きくね?
配列とか。あれキモイ。

まともな人間なら数字は0からカウントするものだ。
という言葉を思い出した。


437 名前:デフォルトの名無しさん mailto:sage [2009/01/07(水) 20:36:44 ]
fortranなんかは1からだろ
数学も1から
C系で0ベースなのはメモリの配置とか低レベルな理由

438 名前:デフォルトの名無しさん mailto:sage [2009/01/07(水) 20:38:03 ]
>>436
配列はN-BASICもVBも0からだろ。

439 名前:433 mailto:sage [2009/01/07(水) 20:39:17 ]
あのー。少しは私のことも思い出してあげてください。。(^^;)

440 名前:デフォルトの名無しさん mailto:sage [2009/01/07(水) 20:40:30 ]
>>439
修飾(ボールドとかイタリックとか)も考慮しないとずれるよ

441 名前:デフォルトの名無しさん mailto:sage [2009/01/07(水) 20:43:21 ]
>>440
嗚呼〜。ほんとだ。そうですよね。。

あ、433のやり方で大筋はOKで、かつ、ボールドも考慮みたいな感じでしょうか?

442 名前:デフォルトの名無しさん mailto:sage [2009/01/07(水) 21:25:06 ]
>>407>>409
表示形式色々変えたんですけど、
Msgboxで表示しても0だし、EXCELのセル上に表記しても#VALUEになります。
なんでなのでしょう。
EXCELのバージョンは2000です。

443 名前:デフォルトの名無しさん mailto:sage [2009/01/07(水) 21:27:33 ]
>>441
細かいことを言えば、Excelは同じセル内でも1文字ごとにフォントを変更できる。
すべてに対応するのはけっこうめんどくさそう。



444 名前:デフォルトの名無しさん mailto:sage [2009/01/07(水) 21:28:40 ]
>>442
元の日付けデータがシリアル値になってないんでねーの?

445 名前:デフォルトの名無しさん mailto:sage [2009/01/07(水) 21:31:48 ]
>>443
そういやそうですね。ちょっとそこらへんも含めて作ってみます。


446 名前:デフォルトの名無しさん mailto:sage [2009/01/07(水) 21:50:11 ]
VBAっていつ無くなるんだっけ?次のバージョンから?

447 名前:デフォルトの名無しさん mailto:sage [2009/01/07(水) 21:55:32 ]
>>444
そもそも08.02.01のような表記をシリアル値にする方法がわからないのですが。
=DATEVALUE("08.02.01")
みたいに表記してもVALUEになるだけですし。

448 名前:デフォルトの名無しさん mailto:sage [2009/01/07(水) 22:01:53 ]
>>447
VBA関係ないよな
=DATEVALUE(SUBSTITUTE("08.02.01",".","/"))
次に何かわからないことがあったら総合相談所行ったら?

449 名前:デフォルトの名無しさん mailto:sage [2009/01/07(水) 22:03:37 ]
>>446
Mac版の2008ではなくなったけど、その次でまた復活する予定。
Win版はなくならない。

450 名前:デフォルトの名無しさん mailto:sage [2009/01/07(水) 22:18:53 ]
>>449
サンクス
本職はC++だけどVBA使えると経理の女の子から結構重宝されるので助かる

451 名前:デフォルトの名無しさん mailto:sage [2009/01/07(水) 23:29:12 ]
てか、事務職でVBAって何に使うんだよw

452 名前:デフォルトの名無しさん [2009/01/07(水) 23:49:34 ]
1行目が項目名で、2行目から201行目までデータが入っています。
オートフィルター後のA列のデータを取得したい。
どんなマクロになりますか?



453 名前:デフォルトの名無しさん mailto:sage [2009/01/08(木) 00:20:50 ]
うぇー Workbook.Save False すると Wrokbook_Before_Close動かん



454 名前:デフォルトの名無しさん mailto:sage [2009/01/08(木) 00:29:40 ]
>>452
オートフィルタの実行はAutoFilterメソッド
結果を配列として取り出すのはCurrentRegion.SpecialCellsメソッド

>>451
単純作業をVBAで自動化してやるとけっこう喜ばれるよ
毎日在庫を確認して発注伝票を印刷してFaxで送信するとか
中小だとアバウトな部分が多くて完全な自動化は難しいから
できるところだけやる

455 名前:デフォルトの名無しさん mailto:sage [2009/01/08(木) 00:35:23 ]
>>451
どんだけ想像力ねぇの?






[ 続きを読む ] / [ 携帯版 ]

前100 次100 最新50 [ このスレをブックマーク! 携帯に送る ] 2chのread.cgiへ
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧]( ´∀`)<259KB

read.cgi ver5.27 [feat.BBS2 +1.6] / e.0.2 (02/09/03) / eucaly.net products.
担当:undef