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


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

Excel VBA 質問スレ Part23



1 名前:既定のプロパティさん mailto:sage [2012/01/29(日) 00:05:13.16 ]
01 pc11.2ch.net/test/read.cgi/tech/1054356121/
02 pc11.2ch.net/test/read.cgi/tech/1168308855/
03 pc11.2ch.net/test/read.cgi/tech/1180192018/
04 pc11.2ch.net/test/read.cgi/tech/1189814602/
05 pc11.2ch.net/test/read.cgi/tech/1197448064/
06 pc11.2ch.net/test/read.cgi/tech/1205231499/
07 pc11.2ch.net/test/read.cgi/tech/1212587819/
08 pc11.2ch.net/test/read.cgi/tech/1219673793/
09 pc11.2ch.net/test/read.cgi/tech/1228372971/
10 pc12.2ch.net/test/read.cgi/tech/1235332603/
11 pc12.2ch.net/test/read.cgi/tech/1241885130/
12 pc12.2ch.net/test/read.cgi/tech/1247566074/
13 pc12.2ch.net/test/read.cgi/tech/1254281104/
14 pc12.2ch.net/test/read.cgi/tech/1262748898/
15 pc12.2ch.net/test/read.cgi/tech/1271261239/
16 hibari.2ch.net/test/read.cgi/tech/1280045912/
17 hibari.2ch.net/test/read.cgi/tech/1289182437/
18 hibari.2ch.net/test/read.cgi/tech/1298240666/
19 hibari.2ch.net/test/read.cgi/tech/1305754555/
20 hibari.2ch.net/test/read.cgi/tech/1312435844/
21 hibari.2ch.net/test/read.cgi/tech/1316931607/

前スレ:
Excel VBA 質問スレ Part22
toro.2ch.net/test/read.cgi/tech/1322400978/


346 名前:デフォルトの名無しさん mailto:sage [2012/02/21(火) 19:34:06.17 ]
すいません、VBAでスレタイ検索したらここに流れ着いたのですが、初心者用の質問スレってありますか?

表内で、ある列の書かれている文字ごとにその行の背景色を変えていくと言うマクロを
VBEでモジュールに書きたいのですが、イマイチイメージが浮かばなくどうしていいかわからない状況です

足の骨折で入院してて勉強が遅れてしまったので急いで追いつきたいのですが、
おそらく簡単であろうこんな問題もわからなくなってきた次第です・・・

変数を使用して、繰り返しの処理をし、RangeとCellsを使って解けと言われたのですが???と言う状況です

そこで初心者用のスレがあったら誘導願います
スレ違いでスイマセン

347 名前:デフォルトの名無しさん mailto:sage [2012/02/21(火) 19:45:46.58 ]
>>346
スレはここでも良いと思うけど、Cellsを使ってループ処理をする、その方法は知ってるの?
For i = 1 to 100
If Cells(i,1)= "xxxx" Then
Cells(i,1)= 〜
End If
Next
みたいなさ

348 名前:デフォルトの名無しさん mailto:sage [2012/02/21(火) 19:48:13.75 ]
>>344
もう解決してるので今更感が強いけど、
テキストファイルをエクセルで開いて下から4行目を取得する、
というやり方もできるよ
Test.txtを開くと仮定したらこんな感じ

Sub test()
Dim WB As Workbook
Dim I&
Dim Txt$
Set WB = Workbooks.Open("test.txt")
With WB.Sheets(1)
I = .Cells(.Rows.Count, 1).End(xlUp).Row
If I > 3 Then
I = I - 3
Else
I = 1
End If
Txt = .Cells(I, 1).Value
WB.Close
MsgBox Txt
End With
End Sub



349 名前:デフォルトの名無しさん mailto:sage [2012/02/21(火) 20:07:58.96 ]
>>347
文字は何パターンあるのかな。
パターン数分の背景色が必要になるけど、何色でも良いの。

350 名前:デフォルトの名無しさん mailto:sage [2012/02/21(火) 20:09:31.70 ]
↑間違えた。>>346宛ね。

351 名前:デフォルトの名無しさん mailto:sage [2012/02/21(火) 21:03:18.61 ]
>>346
このあたりを調べて使えるようになればできるよ。
最終行取得
繰り返し(for each〜next)
colorindex
entirerow
dictionary


352 名前:346 mailto:sage [2012/02/21(火) 21:26:45.65 ]
>>347
For〜Nextは勉強しましたので、その文はナントカわかります

>>349-350
大元が2種類あって、更にその片方が何種類か条件があるような感じです
ですので、背景色は6〜7色前後になりますが、色については指定がありましたので、
ColorIndexの後にその数字を入れていけば対応できます

>>351
残念ながらまだ基礎の方なのでColorIndex以外は習ってないですね・・・

今習ってる構文?といえば
思い出せるのは、If〜Then〜Else、For〜Next、Do〜Loop位ですね


347さんのでなんとなくなイメージは浮かびました



答えてくださった方々、ありがとうございました
とりあえずはもうちょっとネットで調べてみます

353 名前:デフォルトの名無しさん mailto:sage [2012/02/21(火) 22:01:14.63 ]
OS:XP SP3
Excel:2003 SP3
---
(略)
graph_name = ActiveChart.Name
graph_index = ActiveChart.Index
(略)
ActiveSheet.ChartObjects(graph_index).Activate 'エラーが発生する
(略)
---
例えば、graph_nameがGraph 3だったら、
ActiveSheet.ChartObjects("グラフ 3").Activate
とする事で、エラーが発生しなくなります。

解決策をご存知の方はぜひご教授願います。

354 名前:デフォルトの名無しさん mailto:sage [2012/02/21(火) 22:25:34.74 ]
>>353
graph_index =ActiveChart.Parent.Index



355 名前:デフォルトの名無しさん [2012/02/22(水) 10:41:53.09 ]
>>215なんですが、>>217さんのやり方で成功したかと思ったんですが、
欄が全部埋まってる場合にも空白のメッセージボックスが出てきてしまうんですよね。。。

全て記入されている場合はメッセージボックスを出さない処理にするにはどうすれば良いのでしょうか?

356 名前:デフォルトの名無しさん mailto:sage [2012/02/22(水) 11:48:31.30 ]
>>355
最後のmsgboxのところを
ifでよける。


357 名前:デフォルトの名無しさん mailto:sage [2012/02/22(水) 15:04:52.84 ]
>>354
サンクス!

358 名前:デフォルトの名無しさん mailto:sage [2012/02/22(水) 21:09:05.40 ]
>>355
if len(str)>0 then msgbox str

359 名前:デフォルトの名無しさん mailto:sage [2012/02/22(水) 21:10:42.95 ]
then
end if

{
}
で書くのに慣れると、BASICはどうも読みにくくて仕方ない。。
まあ慣れの問題なんだけどさ

360 名前:デフォルトの名無しさん [2012/02/22(水) 22:51:46.44 ]
おう、お前ら
初心者で悪いけど質問な

ユーザーフォームっての作ったんだけど
そこに入力された値ってのはどうやって得るんだ?

初心者なんだから丁寧に教えろよ

361 名前:デフォルトの名無しさん mailto:sage [2012/02/22(水) 23:08:36.01 ]
つまんない

362 名前:デフォルトの名無しさん mailto:sage [2012/02/22(水) 23:34:39.45 ]
ユーザーフォームの値を得たり、値を入れたりは
Applicationオブジェクトから辿ると何となく分かるけど、
Msgboxのボタンを押すとか謎。

363 名前:デフォルトの名無しさん mailto:sage [2012/02/22(水) 23:44:29.66 ]
>>360
オブジェクト名.Valueでよろし。。。。。

364 名前:デフォルトの名無しさん [2012/02/23(木) 00:03:42.57 ]
>>363
なんだ、簡単だったな
あんがとよ!



365 名前:デフォルトの名無しさん mailto:sage [2012/02/23(木) 01:18:57.32 ]
便乗するわけじゃないけどユーザーフォームについての質問です。

ユーザーフォームの右上の×をクリックしたときって
どういう動作をしているのでしょうか?

×でフォームを閉じたことを標準モジュールのプロシージャ
(そのユーザーフォームをShowしたプロシージャ)から知る方法ってありますか?

現在はPublicで宣言したBoolean変数とフォーム上のコマンドボタンを用いて
コマンドボタンをクリックしたら変数をTrueにしてからHideするようにしてます。
(×で閉じたらFalseだからそれで判断してます)
パブリック変数を使わないで×で閉じたことを知る方法があったら教えてください。


366 名前:デフォルトの名無しさん mailto:sage [2012/02/23(木) 02:37:52.92 ]
>>365
標準で用意されているイベントハンドラでは知ることはできない
プロセスの終了方法を区別するには、×ボタンのクリックイベントをフックするぐらいしかないんじゃない?
ただしアプリケーションの作法としては終了方法を区別するような設計にするのはあまり良くないと思うけど

367 名前:デフォルトの名無しさん mailto:sage [2012/02/23(木) 02:48:44.80 ]
>>365
ユーザフォーム内だと
UserForm_QueryClose
で処理できるんだけど
いっそのこと Xで終了出来なくしたら? だめかな?やっぱ

Private Sub UserForm_QueryClose(Cancel As Integer, CloseMode As Integer)
 If CloseMode = 0 Then Cancel = 1
End Sub

368 名前:365 mailto:sage [2012/02/23(木) 03:32:51.89 ]
>>366
無理なのですか、残念です。
終了方法を知りたいというか、
ユーザーフォームと標準モジュール間でパブリック変数を介さないで
情報のやり取りがしたかったのです。
標準モジュール同士ならローカル変数でも引数で受け渡し可能ですけど、
ユーザーフォームには引数渡せませんよね?
標準モジュール側からLoadだけしておいて
フォームのオブジェクトに値を入れてShow
とか、
フォーム側からHideして標準モジュールに戻ってから
オブジェクトの値を取得とかは出来ますけど、
Hideしたときにどういう風にHideしたかの情報を
パブリック変数を使わずに取得できないかな?
ということが知りたかったのです。
(ぶっちゃけていうと「実行」と「キャンセル」の判別に使いたいのです。)
パブリック変数の使用以外に
フォーム上に不可視のオブジェクト(チェックボックスなど)を作っておいて
それをフラグに使うっていう手もありますが、
なんかスマートじゃないな、という気がしまして。

>>367
上に述べたとおり、×をキャンセルボタン扱いで使いたかったわけです。
残念ながら私の思うような方向では出来ないっぽいですけど。

ともあれ、お二方にお答えをいただけてとてもうれしかったです。
どうもありがとうございました。



369 名前:365 mailto:sage [2012/02/23(木) 03:49:06.68 ]
一応、私の知っている範囲でフォームから標準モジュールへ
何らかの値を渡す方法っていうのは以下の3種類しかないです。

1.パブリック変数の使用
2.フォーム上のオブジェクトの値をHide後に取得する
3.フォーム内のプロシージャからワークシートのセルや
外部のテキストファイルなどに書き出しておく

これ以外に何か方法をご存知の方、教えていただけたら幸いです。

370 名前:デフォルトの名無しさん mailto:sage [2012/02/23(木) 04:20:30.93 ]
>>369
普通標準モジュール側に通知用の関数用意しとかない?
ボタン押したときに呼んでやるの

371 名前:デフォルトの名無しさん mailto:sage [2012/02/23(木) 04:41:55.92 ]
>フォーム上に不可視のオブジェクト(チェックボックスなど)を作っておいて
>それをフラグに使うっていう手もありますが

>フォーム上のオブジェクトの値をHide後に取得する

オブジェクト=コントロールだと思ってる?
普通は、フォームにパブリックな変数定義するんじゃないかな
まあ、パブリック変数を介してるのには違いないけど


372 名前:365 mailto:sage [2012/02/23(木) 05:58:09.38 ]
>>370

すごい!おっしゃるとおり出来ました。
今までフォームモジュールの中から標準モジュールのプロシージャをCallしたことがなかった
(引数も渡せないから、そんなことが出来ると思ってなくて試してもいなかった)ので、
やってみて目から鱗です。
これからはこの手でいきます。
ご指導どうもありがとうございました。
こんな感じで試しました。

[Module1]
Sub Test
Userform1.show
End Sub
Sub BtnClick
Stop '<=ここで止まった(つまりここにキャンセルの処理を書いておけばOK)
End Sub

[UserForm1]
Private Sub CommandButton1_Click
Call BtnClick
End Sub


>>371
どうもありがとうございます。
370さんにバッチリなお答えを教えていただいたので今後はそちらを使うことにします。

一応、オブジェクト=コントロールというか、
フォーム内のコントロールはオブジェクト(に含まれる)という程度の認識です。
コントロール以外で、フォーム内にオブジェクトがあるのかどうかは分かってないです。


373 名前:デフォルトの名無しさん mailto:sage [2012/02/23(木) 12:29:19.07 ]
派遣のお姉さんが毎日6時間かけて色んなCSVファイルから必要なデータを取り出して集計してExcelに整形する処理、
私がVBAで2時間位で完全自動化した時は泣いて喜ばれたし、作業無くなったお姉さんはキャビネの掃除とかして
時間潰そうとしてたけど2ヶ月後退職迫られた、プログラママジ害悪

374 名前:デフォルトの名無しさん mailto:sage [2012/02/23(木) 12:44:53.20 ]
人力でも6時間足らずで終わる仕事を2時間程度にしか短縮できないオマエさんがヘボなのか、
VBAでも2時間かかる作業を6時間で終わらせてしまう派遣のオネエさんが凄いのか、
どっちだかよくわからん話だな。



375 名前:デフォルトの名無しさん mailto:sage [2012/02/23(木) 13:11:20.53 ]
どう読んだらそうなるんだ
コーディングが2時間だろ

376 名前:デフォルトの名無しさん mailto:sage [2012/02/23(木) 13:19:41.89 ]
は?
仕様のヒアリング1時間、コーディング30分、テスト30分だろ

377 名前:デフォルトの名無しさん mailto:sage [2012/02/23(木) 13:33:33.99 ]
どう読んだらも何も本来の文脈からいったら
おネエさんの作業時間と対比するには
VBAのほうも処理に必要な時間を書くべきだろ。
もちろん、いくらなんでも人力の3倍前後にしか短縮できないってのは
ちょっとあり得ない話だから
コーディングにかかった時間なのだろうと推測はできるが
はっきりと明記されていない以上、
日本語としては前述のような解釈も十分可能だぞ。


378 名前:デフォルトの名無しさん mailto:sage [2012/02/23(木) 13:42:16.29 ]
> 私がVBAで2時間位で完全自動化した

これを、作業時間2時間で完全自動化したと読めないのは、日本人じゃ無いか、IQ70以下くらいだと思うぞ。
日本人だしIQも高いというなら、それは単なる誤読、勘違いなんだから騒ぐな。

379 名前:デフォルトの名無しさん mailto:sage [2012/02/23(木) 13:45:59.83 ]
どうでもいい事ではスレのびるのな

380 名前:デフォルトの名無しさん mailto:sage [2012/02/23(木) 13:56:32.22 ]
日本語っていうのは語順の入れ替えや語句の省略によるあいまい表現に寛容で
柔軟な構造の言語だから省略された部分に何を補完するかでどうにでも取れるよ。
>私がVBAで2時間ぐらいで(作業が終わるように)完全自動化した。
という読み方だって、
その前段で述べられている人力での作業時間と対比をなすことから考えたら自然な解釈なんだよ。

っていうことがわからないなら
それこそ日本語を勉強し直した方が良いと思う


381 名前:デフォルトの名無しさん mailto:sage [2012/02/23(木) 14:12:50.78 ]
>>380
余分な単語をそぎ落とすと「私が二時間位で自動化した」になるが、これでもまだ六時間かかる処理を
二時間位で終わらせるような自動化をしたと読むのか?
ちょっと、日本人とは思えない解釈だわ

382 名前:デフォルトの名無しさん mailto:sage [2012/02/23(木) 14:28:14.55 ]
>>377
>VBAのほうも処理に必要な時間を書くべきだろ。
はぁ?
お前のべき論なんか聞きたくもないよ。

383 名前:デフォルトの名無しさん mailto:sage [2012/02/23(木) 14:32:11.51 ]
完全自動化されるなら、別に実行に二時間かかってもいいと思うが。
(と、話を変な方向に広げてみる)

384 名前:デフォルトの名無しさん mailto:sage [2012/02/23(木) 14:48:20.87 ]
すでに述べている通り省略の仕方でどうにでもなる話だよ。
自説に都合の良い省略の仕方をされても困る。
作業時間云々のものからそういう省略の仕方ができないってことと、
元の文章がどういう省略の仕方をした結果なのかは別次元の話だからね。

で、俺は単なるべき論で言ってるわけじゃない。
前後の文脈を合わせるという方向で考えたらそうなると言ってるだけで
そうでない解釈が間違いだとは言ってない。
むしろその論理を否定されているからそうでない解釈もありだと言ってるだけ、
先に持論を押し付けたのはどちらか、冷静に判断してほしいし、
そういう論法なら日本語能力云々とかIQ がどうとかも一個人の見解にすぎない話で
だれも聞きたいと思ってないのは御同様。



385 名前:デフォルトの名無しさん mailto:sage [2012/02/23(木) 15:02:01.04 ]
よっぽど悔しいんだろうなぁ

386 名前:デフォルトの名無しさん mailto:sage [2012/02/23(木) 15:07:15.34 ]
> すでに述べている通り省略の仕方でどうにでもなる話だよ。

そもそも省略なんかしてないし。
100人読んだら、お前以外の99人は作業時間が、と取るわ。

387 名前:デフォルトの名無しさん mailto:sage [2012/02/23(木) 15:16:34.11 ]
僕の解釈論はそろそろ終わりにしてもらえませんかね。

388 名前:デフォルトの名無しさん mailto:sage [2012/02/23(木) 15:51:44.33 ]
>>386
あくまで個人の感想です

389 名前:デフォルトの名無しさん mailto:sage [2012/02/23(木) 16:25:51.95 ]
こんな普通の文章でも、個人の解釈でどうとでもなるとか言う奴が書いた仕様書見たいわ

390 名前:デフォルトの名無しさん mailto:sage [2012/02/23(木) 16:30:12.44 ]
自分の読解力のなさをわざわざ指摘してくれる人がいたというのに
逆ギレする馬鹿

391 名前:デフォルトの名無しさん mailto:sage [2012/02/23(木) 16:42:03.30 ]
往生際悪すぎ

392 名前:デフォルトの名無しさん mailto:sage [2012/02/23(木) 18:27:11.41 ]
>>384
オマエさん、ちょっとズレてるよ

393 名前:デフォルトの名無しさん [2012/02/23(木) 19:02:53.08 ]
傍目で見てたら論拠に基づいて発言してる人と
言葉の勢いだけで無根拠に強気なこと言ってる人の議論なんだが、
無根拠の方はそれに気づいてないってのが哀しいな。

394 名前:デフォルトの名無しさん mailto:sage [2012/02/23(木) 19:15:35.72 ]
スレが伸びてると思ってみてみたら何だこいつら
いつぞやのDB馬鹿がまた暴れてんのか?



395 名前:デフォルトの名無しさん mailto:sage [2012/02/23(木) 19:52:44.07 ]
どう解釈するのが普通か、なんて、多人数の意見を集約してみないとはっきりしない

ま、俺の主観ならあの文章なら作業時間2時間だな。俺があの文章かいて
実行時間が2時間だととられたなら書き方がわるかったと反省する

396 名前:デフォルトの名無しさん mailto:sage [2012/02/23(木) 20:18:52.53 ]
ここは質問スレ。
>>373も、難癖をつけようとして失敗した>>374も、どっちもスレチ。


397 名前:デフォルトの名無しさん mailto:sage [2012/02/23(木) 20:34:13.57 ]
スイマセン、助けてください
職業訓練学校に通ってるんだけど、諸事情で1週間ほど休んで一昨日からまた通い始めたんです、
その間に溜まったプリントを消化してて最後の一枚で訳わかんなくなってしまったんです

For〜Nextのネストってのはなんとなく解ったんだけど、どう組み立てていけばいいのかわからなくなって先に進めなくなりました。

imepic.jp/20120223/735690

これなんですが、VBAに慣れた人には簡単すぎるかもしれませんがどなたか助けて下さい

398 名前:デフォルトの名無しさん mailto:sage [2012/02/23(木) 20:59:33.99 ]
>>397
Sub TEST()
Dim i as 整数, j as 整数, k as 整数
For i = 1 to ワークシート数
For j = 6 To 12
For k = 2 To 8
With Cells(j, k)
If .valueが5000以上 Then
.フォント.色=青
ElseIf .valueが2000未満 Then
.フォント.色=赤
End If
End With
Next k
Next j
Next i
End sub

399 名前:デフォルトの名無しさん mailto:sage [2012/02/23(木) 21:07:02.90 ]
>>398
訂正
With worksheets(i).Cells(j, k)

400 名前:デフォルトの名無しさん mailto:sage [2012/02/23(木) 21:12:10.07 ]
>>398-399
ありがとうございます!
そうか・・・Nextの終了順番が間違ってたのもあったのか
これでナントカ追いつけそうです

401 名前:デフォルトの名無しさん mailto:sage [2012/02/23(木) 21:57:48.70 ]
今、訓練所でvba教えでるのか。田舎だと、使う場面が少ないが


402 名前:デフォルトの名無しさん mailto:sage [2012/02/23(木) 23:01:09.21 ]
XP-2002環境です。

シートAに、2行ペア組のデータで、5万行まで埋まっています。

Dim strData(15) As String  に2行のセルの値を配列に放り込んで、
シートBにパコパコ張り付けるのを全行ループしています。

だけど、必ずシートAのある行数のところで、オーバーフローとなって止まります。
別にその行のデータの型などが、特におかしいわけでは無いです。
(成功したデータをその行に貼り付けてもオーバーフロー)

もしかして、VBAで処理する行数の上限等の何か制約があるのでしょうか?
上限があるなら何か他の対策はあるのでしょうか。
それとも何か他の原因が考えられるのでしょうか?

よろしくお願いします。

403 名前:デフォルトの名無しさん mailto:sage [2012/02/23(木) 23:07:53.13 ]
>>402
IntegerをLongにしてみたらどうでしょうか

404 名前:デフォルトの名無しさん mailto:sage [2012/02/23(木) 23:19:15.10 ]
>>402
VBAじゃなくてExcel自体の行数の上限が65535行だけどそれは理解してるの?
Excel2007で100万行に拡張されたけど



405 名前:デフォルトの名無しさん mailto:sage [2012/02/23(木) 23:25:17.48 ]
>>404
5万行ってことだから問題ないんじゃないの?

406 名前:デフォルトの名無しさん mailto:sage [2012/02/24(金) 00:06:59.57 ]
>>402
5万行×8列を2万5千行×16列にしてるのかな?

407 名前:デフォルトの名無しさん mailto:sage [2012/02/24(金) 01:04:56.91 ]
Range("A1:A3").Offset(0,2)
ってやったら、
Range("C1:C3")
なオブジェクトが取れると期待してたけど、
Range("C1")
の単一のセルなオブジェクトになった。

そう言うもの?何かへんなのか?
"A1:A3"は、結合してるセルなのだけど、何か関係ある?

408 名前:デフォルトの名無しさん mailto:sage [2012/02/24(金) 03:41:06.42 ]
>>407
Offsetは左上の単一セルしか見ない
範囲を広げるにはResize

409 名前:デフォルトの名無しさん mailto:sage [2012/02/24(金) 07:09:13.61 ]
>>403
ありがとうございました。intカウンターをLongで解決。
なんで32000行あたりの特定の数字でオーバーフローしちまうのかなぁ

410 名前:デフォルトの名無しさん mailto:sage [2012/02/24(金) 07:28:41.30 ]
>>409
それぞれの型には範囲ってもんがある

基本的なことぐらい知ってれやれよ

www.geocities.jp/cbc_vbnet/kisuhen/hensuu.html
変数・定数(基礎編)



411 名前:デフォルトの名無しさん [2012/02/24(金) 08:28:36.17 ]
>>407
実際にRange("C1:C3")になるぞ。
そっちのPCは呪われてるのか?

412 名前:デフォルトの名無しさん mailto:sage [2012/02/24(金) 19:19:10.59 ]
>>411

>>407

>"A1:A3"は、結合してるセルなのだけど、何か関係ある?

って書いてるけど、うちの環境で試しても
A1:A3が普通のセルならC1:C3を返すけど、
A1:A3を結合してるとC1だけしか返されなかったよ。

413 名前:デフォルトの名無しさん mailto:sage [2012/02/26(日) 14:46:56.38 ]
>>412
ちょっと気になっていろいろ試してみた
ヘルプには
>指定された範囲からのオフセットの範囲を表す Range オブジェクトを返します。
とある

ここでの指定された範囲ってのは指定したRangeじゃないし、オフセットの範囲ってのもそのRangeの範囲じゃないってことらしい

問題は、結合セルに対してOffsetをとった場合
指定された範囲=結合セルという一つの範囲
オフセット基準=指定範囲の終了地点(右下)
だとみなされるようだ
A1:A3が一つの結合セルだった場合、Range("A1").OffsetもRange("A2").OffsetもRange("A3").Offsetも同じ動作をする

普通にOffset実装したらそういう動作しそうもないから、
わざわざ結合セルに対するOFFset動作は特別な動作するように実装されてるんじゃないかな

ということで、>>407そう言うものだと思われます

だれかこの動作の公式なドキュメントしってる?

414 名前:デフォルトの名無しさん [2012/02/27(月) 00:59:22.80 ]
Excelファイルが読み取り専用の場合、入力できなくする方法

Excelファイルを読み取り専用で開いてるのを忘れて、
いざ保存しようとした時に読み取り専用だった事を思い出すって事ありませんか?
だったらセルのロックみたいに入力自体できなくすればいいじゃないかと
思ってはみたもののどうすればいいかわかりません。
読み取り専用推奨で保存したファイルを開いて
読み取り専用にするか訊いてきた時に"はい"の場合はセルのロック、
"いいえ"の場合はセルのロックを解除というマクロを組んでAuto_Openで動かしてみましたが、
どうも訊いてくるより先にAuto_Openが実行されているようでうまくいきませんでした。
読み取り専用で開くかどうかもマクロで組めれば解決するのかなと思いますが、やり方がわかりません。
どうにかならないでしょうか?



415 名前:デフォルトの名無しさん mailto:sage [2012/02/27(月) 01:19:29.12 ]
Workbook_Openイベントプロシージャ

416 名前:デフォルトの名無しさん [2012/02/27(月) 07:37:36.89 ]
マクロの記述で質問です。
B列のセルに"日本"を入力すると、
その該当するC列とD列のセルの値や文字列をクリアして斜線を入れたいのです。

例えば
B2へ"日本"を入力すると、C2〜D2のセルに入っている値・文字をクリアして
自動的に斜線を入れる、

同じく
B3へ"日本"を入力すると、C3〜D3のセルに入っている値・文字をクリアして
自動的に斜線を入れる、

といった感じです。

ここで
B2に対してはそれらの動作が上手くいくのですが
B3やB4以降の行に関しては上手くいきません。

例えばB3へ"日本"を入力するとC3〜D3のセル内容はクリアされずC2〜D2の値がクリアされてしまいます。
B4やB5以降に関しても同じくC2〜D2の値がクリアされてしまいます。

417 名前:デフォルトの名無しさん [2012/02/27(月) 07:39:07.10 ]
上の続きです。
一応マクロの文です。
おそらく相対参照の問題だと思います。
調べて試行錯誤しましたが上手いやり方がわかりません。
Excel2003です。
どなたかご教授お願いします。

Private Sub Worksheet_Change(ByVal Target As Range)
Dim r, trg As Range
Set trg = Intersect(Target, Range("B2:B14"))
If Not trg Is Nothing Then
For Each r In trg
If r.Value = "日本" Then
r.Offset(0, 1).Resize(1, 2).Borders(xlDiagonalDown) _
.LineStyle = xlContinuous
Range("C2:D2").ClearContents
Else
r.Offset(0, 1).Resize(1, 2).Borders(xlDiagonalDown) _
.LineStyle = xlNone
End If
Next r
End If
End Sub

418 名前:デフォルトの名無しさん mailto:sage [2012/02/27(月) 07:47:41.48 ]
> Range("C2:D2").ClearContents
それはそうだろ、としか。

419 名前:デフォルトの名無しさん mailto:sage [2012/02/27(月) 08:01:13.16 ]
Range(Cells(i,j),Cells(i+?,j+?))
でこのi,j,?を操作すれば


420 名前:デフォルトの名無しさん mailto:sage [2012/02/27(月) 12:37:05.35 ]
Range("C2:D2").ClearContents を

r.Offset(0, 1).Resize(1, 2).ClearContents
で、いけたわ

こういうのわかりにくいから、
r.offset(0.1).clearcontents
r.offset(0,2).clearcontents

ってやってるわ。

421 名前:デフォルトの名無しさん mailto:sage [2012/02/27(月) 16:29:03.11 ]
>>418-420
ありがとうございます。
削除する対象のセルを結合したセルにすると
「結合された一部のセルを〜」のエラーが出てダメになりましたが
r.Offset(0, 1).Resize(1, 2) = "" にすると大丈夫でした。
お世話になりました


422 名前:デフォルトの名無しさん mailto:sage [2012/02/27(月) 18:00:44.53 ]
range(“a1“).numberformat=“@“
range(“b3“).numberformat=“hh:mm“
if range(“a1“)<>range(“b3“) then
としても差異は検出されないけれど、セルの内容全てを比較したい場合は、全プロパティ分のifを書いてやらんとあきまへんのどすか。

423 名前:デフォルトの名無しさん mailto:sage [2012/02/27(月) 18:02:54.64 ]
.text

424 名前:デフォルトの名無しさん mailto:sage [2012/02/27(月) 19:26:17.07 ]
range("a1").numberformat="#,##0"
range("b3").numberformat="#,##0;-#,##0"
値は両方とも100

この場合も違うと判定させたい?




425 名前:デフォルトの名無しさん mailto:sage [2012/02/27(月) 23:40:37.48 ]
させたいどす。
.value でも .width でも罫線でも、違いを検出したいんどすえ。

426 名前:デフォルトの名無しさん mailto:sage [2012/02/28(火) 10:59:13.54 ]
rangeのプロパティカウントさせることができないっぽい
自分で関数作るか、if文書くかしかなさげ

というか、プロパティカウントできないの初めて知ったわ
これ地味に不便ね

427 名前:デフォルトの名無しさん mailto:sage [2012/02/28(火) 12:42:32.91 ]
VISTA Excel2007 です
ライブラリの参照設定をコード内で実行したいのですが、
同じ文を標準モジュールに書くとエラーが出ないのに
クラスのイニシャライズに書くと「中断モードでは実行できません」と
エラーメッセージが出ます(ただ参照設定の処理がなされます)
クラスのイニシャライズでエラーが出る原因など分かる方がいましたらご教授ください
以下コード:
Const DAOFileFPath As String = "C:\Program Files\Common Files\Microsoft Shared\DAO\dao360.dll"

ActiveWorkbook.VBProject.References.AddFromFile DAOFileFPath




428 名前:デフォルトの名無しさん mailto:sage [2012/02/28(火) 21:31:31.36 ]
>>427
べつに普通に実行できるが
そのエラーメッセージの通り、中断モードのままやるからエラーになってるだけだろ


429 名前:427 mailto:sage [2012/02/29(水) 01:03:02.92 ]
すみません
もっと早く書き込みたかったのですが仕事で抜けられませんでした
イニシャライズでなくメソッドにしても同じエラーになったので
もしやと思い、クラスを新規作成して一からコードを手打ちしていったら
今度はうまく行きました
モジュールが壊れていたんだと思います
必ず通るはずのStopをスルーして、その先のMsgBoxが動いている時点で気づくべきでした
前にもこんなことがあって、別のモジュールに一から書き直したらやっぱり普通に動いた
そんな無茶な使い方してるわけじゃないのにな…
どうも失礼しました

430 名前:デフォルトの名無しさん mailto:sage [2012/02/29(水) 02:44:05.36 ]
いやだから、Stopで止まったら中断モード...
まあいいか

431 名前:デフォルトの名無しさん mailto:sage [2012/02/29(水) 10:05:54.43 ]
忙しすぎて日本語読む余裕がないんだろうな

432 名前:デフォルトの名無しさん mailto:sage [2012/03/01(木) 00:18:08.68 ]
すみません、どうも詰まってしまったので質問させてください
商品名の入っているシートから、数学で言う所の和集合を取りたいと考えています
例えば、

A列 B列
1 CC TT

2 HH CC

3 TT E3

となっているようであれば、(CC、TT、HH、E3)を取り出して、できれば1セルに一つの名前という形で長く並べたいと考えています

Sub Test()
Range("F8").Value = Union(Range("A1:A3"), Range("B1:B3")).Value
End Sub

おそらくUnionを使うのかなと考えて、とりあえず1セルに一つの名前ということを考えずに書いてみたのが上のコードなんですが、
実行するとF8にはCCしか入力されません。これはどこが間違っているのでしょうか?
どなたかよろしくお願いいたします。

433 名前:デフォルトの名無しさん mailto:sage [2012/03/01(木) 02:13:02.97 ]
すいません、色々試してみたら半分くらい自己解決できました。

Sub MultipleRange()
Dim rng1 As Range, rng2 As Range, myMultiRanges As Range

Worksheets("Sheet1").Activate
Set rng1 = Range("A1:A3")
Set rng2 = Range("B1:B3")
Set myMultiRanges = Union(rng1, rng2)

Dim i As Integer
For i = 1 To 6
Cells(10, i).Value = myMultiRanges(i).Value
Next i

End Sub

これだと重複ができるようなので、これやった後に重複チェックのコードを別にかければなんとかいけそうです。お騒がせしました

434 名前:デフォルトの名無しさん mailto:sage [2012/03/01(木) 10:10:50.67 ]
Excel2010 (win7 home)

Worksheets("test")の
Private Sub Worksheet_Activate()
UserForm1.Show
End Sub
と入れて Worksheets("test")のタブをクリックして表示させた時に
Userform1が立ち上がるのは確認したんですが、

ThisWorkbookのシートモジュールの
Private Sub Workbook_Open()
Worksheets("test").Activate
End Sub
としてブックの起動時にWorksheets("test")をアクティブにしても
Userform1が出てこないんですが、これはなぜ?
明示的に
UserForm1.ShowをWorkbook_Open()に入れればもちろんフォームが
出てくるんですけど、これではあまり意味がないような気がする
んですけど。



435 名前:デフォルトの名無しさん mailto:sage [2012/03/01(木) 10:20:46.78 ]
九分九厘、そのワークシートtestがブックを開く時点からアクティブなんだろうな。
ワークシートのActivateイベントは「他のシートから移動してきたとき」しかトラップされないから、
ブックを閉じるときにtestがアクティブな状態で保存されて、開くときに最初からアクティブだとトラップできてない。

試しにワークシートtest2を作って、それをアクティブにした状態で保存して開いてみ?

436 名前:デフォルトの名無しさん mailto:sage [2012/03/01(木) 10:38:38.23 ]
おおっ、即レスかつその通りでした!

ありがとうございますm(__)m

437 名前:デフォルトの名無しさん mailto:sage [2012/03/01(木) 18:16:46.90 ]
VBAで

あ 1
あ 1

を行を文字と数字に列を整えることは可能?

438 名前:デフォルトの名無しさん mailto:sage [2012/03/01(木) 18:20:24.65 ]
ちゃんとした日本語の説明か、結果のプレビューを頼むwwwwwwwwwwwwwwww

439 名前:デフォルトの名無しさん mailto:sage [2012/03/01(木) 20:08:50.04 ]
エスパーの訓練が捗るな

440 名前:デフォルトの名無しさん mailto:sage [2012/03/01(木) 20:50:42.49 ]
Excel2010(vaista)ですが
家計簿を作成してまして収入と支出の差額を表の一番右下の
セルに表示させているのですがそのセルの数字が黒字(0以上)ならセルの背景を青
赤字(0未満)ならセルの背景を赤にしたいのですが上手くできません
そもそもVBAでは不可能なので素直に条件式書式設定を毎回
使用したほうが良いのでしょうか?

441 名前:デフォルトの名無しさん mailto:sage [2012/03/01(木) 22:14:39.94 ]
条件式書式設定でできることを態々VBAでやろうとする意味が分からないんだが

442 名前:デフォルトの名無しさん mailto:sage [2012/03/02(金) 00:09:42.41 ]
Excel 2010です。開発タブをリボンに表示させる方法を教えて下さい。
2007では、「ファイル」→「オプション」で「開発タブをリボンに表示する」が
出て来るのですが。

443 名前:デフォルトの名無しさん mailto:sage [2012/03/02(金) 00:15:51.44 ]
イベントプロシージャに親プロシージャの引数をわたすことは
可能でしょうか?

444 名前:デフォルトの名無しさん mailto:sage [2012/03/02(金) 00:20:12.40 ]
>>443
おや?



445 名前:デフォルトの名無しさん mailto:sage [2012/03/02(金) 00:23:55.72 ]
今日は妙に>2すら読まない奴が多いな…

446 名前:デフォルトの名無しさん mailto:sage [2012/03/02(金) 01:38:50.37 ]
>>442
ファイル→オプション→リボンのユーザー設定→開発にチェック






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

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

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