[表示 : 全て 最新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/


28 名前:デフォルトの名無しさん [2012/01/29(日) 21:19:41.12 ]
>>10のコードを
DO ifで書きなおして無事動きました。
確かにこっちのほうがわかりやすい気がします!
ありがとうです!

29 名前:デフォルトの名無しさん mailto:sage [2012/01/29(日) 21:24:42.27 ]
俺もDo Until の中に必ず If Then Exit Do End Ifを付けてる
For Next なら Exit For だな

明示しておけば(自分にとって)判りやすいという理由だけど

30 名前:20 mailto:sage [2012/01/29(日) 21:26:33.22 ]
>>27
それって速度は変わらなくないですか?
自分でちょっと考えたのは脱出条件でAndを使うときに
UntilやWhileだとAndしかだめだけどIf文だとIfのネストで書けるから
(本当にほんのちょっとだけ)速く出来るかも、ということです。

31 名前:20 mailto:sage [2012/01/29(日) 21:32:26.12 ]
        ゴガギーン
             ドッカン
         m    ドッカン
  =====) ))         ☆
      ∧_∧ | |         /          / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
     (   )| |_____    ∧_∧   <  おらっ!出てこい>>18
     「 ⌒ ̄ |   |    ||   (´Д` )    \___________
     |   /  ̄   |    |/    「    \
     |   | |    |    ||    ||   /\\
     |    | |    |    |  へ//|  |  | |
     |    | |    ロ|ロ   |/,へ \|  |  | |
     | ∧ | |    |    |/  \  / ( )
     | | | |〈    |    |     | |
     / / / / |  /  |    〈|     | |
    / /  / / |    |    ||      | |
   / / / / =-----=--------     | |

32 名前:20 ◆dMgj9t5wQ2 mailto:sage [2012/01/29(日) 21:46:15.53 ]
>>31
成りすましは勘弁してください
私は31じゃないです。

33 名前:デフォルトの名無しさん mailto:sage [2012/01/29(日) 22:09:06.08 ]
>>29
>明示しておけば(自分にとって)判りやすいという理由だけど

意味がわからん。

Do While 〜 Loop も Do ... Loop Until 〜 も、「〜」で充分明示的だと思うが。

まあ、ループ中で読み込みとかの処理をして、EOF ならぬけて、そうでなければ
読み込んだデータの処理をして最初に戻ると言うような処理は、それなりにあるから
Do: ... : If 〜 Then Exit Do: ... : Loop も使うけど、それに限定するのは >>27
言うようにちょっと頭固すぎと思う。

34 名前:デフォルトの名無しさん mailto:sage [2012/01/29(日) 22:49:12.41 ]
冗長に書いた方がわかりやすいと感じる人は結構いるっぽいね。
でも>>29は同じ条件判断を2箇所に書く(2回やる)ってことでしょ? それはないわー。

35 名前:デフォルトの名無しさん mailto:sage [2012/01/29(日) 23:20:23.79 ]
>>10
ActiveSheet.ShowDataForm
マジオススメ

36 名前:デフォルトの名無しさん mailto:sage [2012/01/29(日) 23:57:52.46 ]
>>34
>でも>>29は同じ条件判断を2箇所に書く(2回やる)ってことでしょ? それはないわー。

さすがにそれはないと思うが...、修正面倒だし、
そもそも他人が見たときヘタすると意図汲み取れないと思う。



37 名前:デフォルトの名無しさん [2012/01/30(月) 00:27:10.99 ]
>>35
使ってみたのですが、よく意味がわかりません。
起動時にフォーム呼び出しっぽいのですが、何もおこらないのですが
どういう効果があるのですか?

38 名前:デフォルトの名無しさん mailto:sage [2012/01/30(月) 06:53:15.42 ]
>>37
聞く前にググれ

39 名前:デフォルトの名無しさん mailto:sage [2012/01/31(火) 03:33:06.65 ]
Test

40 名前:デフォルトの名無しさん mailto:sage [2012/01/31(火) 22:37:41.24 ]
2003/2007で質問です。
.OnAction で文字列を使うときにはどうすれば良いのでしょうか?
例えば、キー "foo" を持つ "dic" というディクショナリを引数とする関数を
.OnAction に指定したい場合、

Sub Menu()
 Dim CB
 Set CB = Application.CommandBars("Cell").Controls.Add()
 With CB
  .Caption = "テスト"
  .OnAction = "'testfunc dic(""foo"")'"
 End With
End Sub

のようにしてもうまく動きません。

仕方が無いので、

  val = dic("foo")
  .OnAction = "'testfunc " & val & "'"

のように対処しています。

よろしくお願いします。

41 名前:デフォルトの名無しさん mailto:sage [2012/02/01(水) 07:37:32.24 ]
OnActionの実行されるスコープでは、
dicが見えていないって事なんじゃないか?

42 名前:デフォルトの名無しさん mailto:sage [2012/02/01(水) 07:58:29.15 ]
OnActionに指定するのはマクロ名
式は評価しないんだろ

43 名前:デフォルトの名無しさん mailto:sage [2012/02/01(水) 22:04:08.03 ]
OnActionは罠が多いよな…

44 名前:デフォルトの名無しさん mailto:sage [2012/02/01(水) 22:12:34.88 ]
>>40
>  val = dic("foo")
>  .OnAction = "'testfunc " & val & "'"
これで対処できるって事は
.OnAction = "'testfunc " & dic("foo") & "'"
で済む話のような気もするが…まさかな

45 名前:デフォルトの名無しさん mailto:sage [2012/02/01(水) 22:22:00.23 ]
&を使わずに書きたい、ってことじゃない?

46 名前:デフォルトの名無しさん mailto:sage [2012/02/01(水) 22:22:58.83 ]
>>42
評価されるよ



47 名前:デフォルトの名無しさん mailto:sage [2012/02/02(木) 03:05:03.67 ]
式を評価した結果の文字列をOnActionに設定してるだけで、
OnActionに式が設定されて評価されてるわけではないと思うが


48 名前:デフォルトの名無しさん mailto:sage [2012/02/02(木) 06:49:11.59 ]
バカ多すぎw
このレベルのことで意見割れるとかあり得ねぇw

49 名前:デフォルトの名無しさん mailto:sage [2012/02/02(木) 08:01:58.10 ]
詳細な仕様を知っている>>48がいると聞いて

50 名前:デフォルトの名無しさん mailto:sage [2012/02/02(木) 08:18:33.01 ]
>>49
いや所詮草ガキだから

51 名前:デフォルトの名無しさん mailto:sage [2012/02/02(木) 22:23:01.17 ]
草=複数の連続する"w"

1個の場合、複数でも連続でもないから、実は草ではない

52 名前:デフォルトの名無しさん mailto:sage [2012/02/02(木) 22:49:35.37 ]
>>51
さすが小学生だな
目のつけどころが違う

53 名前:デフォルトの名無しさん mailto:sage [2012/02/02(木) 23:18:44.34 ]
>>51
それは単草といって草の一種なのよ

54 名前:デフォルトの名無しさん mailto:sage [2012/02/02(木) 23:34:57.87 ]
マクロから別名保存のダイアログを出して、ユーザーにブックを保存してもらおうとしているのですが、
ダイアログおw表示させた時に初めての保存ならマイドキュメント、2回目以降なら前回のフォルダーを
表示されるようにするにはどうすればいいでしょうか?
よろしく御願いします。

55 名前:デフォルトの名無しさん mailto:sage [2012/02/03(金) 02:11:09.99 ]
>>54
まず仕様をしっかり確定させないとプログラミングはできないぞ

初めてかどうかはどうやって判別するんだ?
前回のフォルダはどこにどうやって保存するんだ?

これが答えられない(わからない)ってなら、もうちょっと詳しく状況を書かんとなんとも言えん

56 名前:デフォルトの名無しさん mailto:sage [2012/02/03(金) 06:32:53.23 ]
>>54
初めての保存→直接Excelを起動しての作成
2回目以降→既存のBookを呼出し修正保存

意味はこれで合っている?
1年1組成績表フォルダの1月成績結果というBookを呼出して新規作成を選んだ時の保存先もやはりマイドキュメント?
或いは2月成績結果にBook名に流用変更して保存する場合は?



57 名前:デフォルトの名無しさん mailto:sage [2012/02/04(土) 06:16:46.60 ]
>>53
残念、ハズレ

というか、そもそも「単草」なんてないから

草=複数の連続する"w"
   数が複数と定義されているので、単数を表す接頭語を付けることは無い

芝="w"そのものであり数は関係ない
   数が定義されていないので、数を表す接頭語を付けることもある->単芝、複芝

「単草」ってのは君と同じく、単芝と草を混同した勘違い君が
思いつきで口にするだけで、定義としては存在していない

58 名前:デフォルトの名無しさん mailto:sage [2012/02/04(土) 07:16:08.51 ]
>>57
どっちでもええやん
言葉とはそういう勘違いから定着するもんだよ

正しい日本語は〜と言ってる学者連中はただの馬鹿だぞ
もう広まってる用法ってのは正しいものとしていかんと

59 名前:デフォルトの名無しさん [2012/02/04(土) 07:16:34.18 ]
>>57
そもそも「草」とか「芝」とかが定義されてるってどこで?
少なくとも非ネットの日常生活においてwを草とか芝とか言わない訳だが。
単にネット上のコミュニティーで認知されてると「君個人が認識してる」だけでしょ。
だったら「単草」だっておkじゃないの?
その辺の線引きが曖昧すぎだよ

ちなみに>>53ではありません。
草とか芝の定義とやらにも興味ないです

60 名前:デフォルトの名無しさん mailto:sage [2012/02/04(土) 08:03:57.05 ]
ネタ解説に釣られ杉wwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww

61 名前:デフォルトの名無しさん [2012/02/04(土) 09:02:23.24 ]
言い負かされるとネタで逃げる奴

62 名前:デフォルトの名無しさん mailto:sage [2012/02/04(土) 09:14:49.65 ]
かまうなよ
これは僕はレス乞食ですって自己紹介をしてるだけなんだからwwww

63 名前:デフォルトの名無しさん mailto:sage [2012/02/04(土) 10:15:29.22 ]
>>58
いい訳必死だな

あのさ、誤用と、新語や新たな言い回しを一緒くたにしてないか?
別に既存の日本語以外は使っちゃだめとは言わないけど、
間違いを内包する言葉までまとめて「定着すればそれは正しい」なんて言うのはただの馬鹿だぞ

wを芝と呼ぶのは良いが、wをエックスと呼ぶのは明らかな間違いだろ


>>59
> 「w」の文字が並ぶ様子が「雑草が生えているように見える」というところから、
            ~~~~~~
> 「w」を多数並べて笑いを表現する行為を「草を生やす」と呼ぶ場合がある。
      ~~~~~~~~~~~~~

> 草 - ネットスラングでwwwwwwwのこと。


> 草:インターネットスラングのひとつ。(笑)の略であるwを多数書き連ねることで蔑笑を表したもの。
                                                ~~~~~~~~~~~~~~~~~

どこを見ても、「並ぶ」「多数」「書き連ねる」と複数であることを説明し、例としても7連のものが上げられている
因みに上記は独断と偏見入り交じる個人サイトの記事ではなく、ウィキペやニコペなど大手の手がける辞典の記事ですよ

64 名前:デフォルトの名無しさん mailto:sage [2012/02/04(土) 10:42:23.74 ]
荒らすなら他へ行け、馬鹿

65 名前:デフォルトの名無しさん mailto:sage [2012/02/04(土) 11:04:08.52 ]
こういう話題しかレスできないんだろ。
スルーしとけ。

66 名前:デフォルトの名無しさん [2012/02/04(土) 11:44:22.68 ]
wikiが定義ってアホかと



67 名前:デフォルトの名無しさん mailto:sage [2012/02/04(土) 13:21:17.58 ]
広辞苑だって出版された当時のスラングを個人の独断で大量に収録してんのに
それは信頼してWikipediaをバカにする男の人って本質がわかってないってゆーか、頭悪いよね

68 名前:デフォルトの名無しさん mailto:sage [2012/02/04(土) 13:41:55.07 ]
反射的に wiki を馬鹿にする奴もどうかと思うが、
広辞苑が個人の判断で作られてるって、これまた
頭悪い以前のアホが来たな。


69 名前:デフォルトの名無しさん mailto:sage [2012/02/04(土) 17:37:20.46 ]
wikiをバカにしてるんじゃなくて、wikiがネットスラングの定義だって言ってるやつをバカにしてるんじゃないかな

70 名前:デフォルトの名無しさん mailto:sage [2012/02/04(土) 18:56:03.91 ]
まあ結論は出たみたいだから、もう終わりにしようぜ。

71 名前:54 mailto:sage [2012/02/04(土) 19:32:32.70 ]
>>55-56
レス、ありがとうございます。
返事が遅くなってすみません。

ユーザーフォームに保存用のボタンを貼って、保存しようとしています。
保存を行った時に保存先フォルダーの記憶用変数を用意して、その変数が
空なら初めての保存、空白以外なら保存用ダイアログを表示した時にそのフォルダーが
表示したいという事でした。
変数に取り込めれば、フォームを閉じる際にiniファイル等に保存して次回以降は
フォルダー選択の手順を省けると思いました。

よろしく御願いします。

72 名前:54 mailto:sage [2012/02/04(土) 19:55:05.76 ]
書き忘れました。
保存先記憶用変数が空の場合は、保存先ダイアログ表示時の
フォルダーはExcel任せでも良いです。
よろしくお願いします。

73 名前:デフォルトの名無しさん [2012/02/04(土) 20:05:32.51 ]
iniファイルへの書き込みや読み込みはAPI使うっての知ってますか?
まぁ単純にテキストファイルのオープンで読み込み書き込みでも出来なくはないだろうけど


74 名前:デフォルトの名無しさん mailto:sage [2012/02/04(土) 20:16:21.93 ]
>>72
で、何がわからないの?

75 名前:デフォルトの名無しさん mailto:sage [2012/02/04(土) 21:11:43.87 ]
>>71
chdir 前回保存先
名前を付けて保存ダイアログ表示
今回保存先を選択
非表示シートにcurdir(今回保存先)を書きみ保存
名前を付けて保存


76 名前:デフォルトの名無しさん mailto:sage [2012/02/04(土) 23:05:00.06 ]
複数のブックの一部を読み取っていくマクロを書いているのですが
非表示・バックグラウンドでブックを開くにはどうしたら良いのでしょう?
ググったりしていろいろ試してみたのですが、どうしても一瞬表示されてしまいます。 マクロは
Application.ScreenUpdating = False
Set _ActiveSheet = ActiveSheet
Set book = Workbooks.Open(PATH)
book.Windows(1).Visible = False
Call _ActiveSheet.Activate()
Application.ScreenUpdating = True
というようにしています。

また、ブックのオープンに時間がかかっているため、非同期でブックをオープンしてそれをキューに放り込んで行きたいのですが、
こういったことはどうやってやれば良いのでしょう?



77 名前:デフォルトの名無しさん mailto:sage [2012/02/04(土) 23:20:48.95 ]
>>71
ini ファイルじゃなくて、ブック自体に覚えさせることもできるよ。

Option Explicit
Const PropertyName As String = "SavedFolder"
Sub Macro1()
 Dim SavedFolderProperty As DocumentProperty
 Set SavedFolderProperty = Nothing
 Dim Index As Integer
 With ActiveWorkbook.CustomDocumentProperties
  For Index = 1 To .Count
   If .Item(Index).Name = PropertyName Then
    Set SavedFolderProperty = .Item(Index): Exit For
   End If
  Next
 End With
 With Application.FileDialog(MsoFileDialogType.msoFileDialogSaveAs)
  .FilterIndex = 2
  If SavedFolderProperty Is Nothing Then
   .InitialFileName = ""
  Else
   .InitialFileName = SavedFolderProperty.Value
  End If
  .Show
  If SavedFolderProperty Is Nothing Then
   ActiveWorkbook.CustomDocumentProperties.Add PropertyName, False, MsoDocProperties.msoPropertyTypeString, .SelectedItems.Item(1)
  Else
   SavedFolderProperty.Value = .SelectedItems.Item(1)
  End If
  .Execute
 End With
End Sub

78 名前:2000 mailto:sage [2012/02/05(日) 02:30:18.27 ]
>>76
> Application.ScreenUpdating = False
> Set _ActiveSheet = ActiveSheet
> Set book = Workbooks.Open(PATH)
> book.Windows(1).Visible = False
> Call _ActiveSheet.Activate()

ActiveWorkbook.Close

> Application.ScreenUpdating = True


79 名前:デフォルトの名無しさん [2012/02/05(日) 17:31:56.30 ]
エクセルの関数について質問です。

B1セルに10が入っていたらA1セルに100と返し、
  〃 11か12、13のいずれかの数字が入っていたらA1セルに200と返し、
  〃 14が入っていたらB1セルに300と返し、
  〃が空欄もしくは、10.11.12.13.14以外の数字が入っていたら100と返す
数式を組みたいのですがIFとORを組み合わせてもうまくいきません。
どなたかご教授頂けますでしょうか。

80 名前:デフォルトの名無しさん mailto:sage [2012/02/05(日) 17:38:45.19 ]
それをVBAでやりたいってことかな?

81 名前:79 [2012/02/05(日) 17:43:45.11 ]
>80
いえ、違います。
エクセル上で上記の数式を完成させたいだけです。

82 名前:デフォルトの名無しさん mailto:sage [2012/02/05(日) 17:46:29.32 ]
>>81
だったら
Excel総合相談所 100
toro.2ch.net/test/read.cgi/bsoft/1325935411/l50



83 名前:79 [2012/02/05(日) 17:50:34.95 ]
あ、スレ違いでしたね。
ちょっとこっちで質問してみます。

84 名前:デフォルトの名無しさん mailto:sage [2012/02/06(月) 03:30:45.14 ]
同一コードなのに、コードのキャッシュでもされてるのか、結果不定で「?」なときがあると思いますが、そんな時の対処方法はありますか?

85 名前:デフォルトの名無しさん mailto:sage [2012/02/06(月) 04:16:29.46 ]
構文エラーを起こす

86 名前:デフォルトの名無しさん mailto:sage [2012/02/06(月) 05:30:54.13 ]
>>84
プログラムとは…
自分が思った通りに動く物ではない
自分が書いたとおりに動くのである

つまり結果が自分の希望に反して不定になるのは書き方が悪い。はっきり言えば間違ってる
よく見直せ



87 名前:デフォルトの名無しさん mailto:sage [2012/02/06(月) 06:58:44.08 ]
Excel2003です
セルの内容でDBに更新を行う処理です

Set crs = New ADODB.Recordset
crs.CursorType = adOpenDynamic
crs.LockType = adLockOptimistic
crs.CursorLocation = adUseClient
crs.ActiveConnection = cn
'
sSQL = ""
sSQL = sSQL & "SELECT *"
sSQL = sSQL & " FROM WSEL"
sSQL = sSQL & " ORDER BY WSEL.Chusyutu"
crs.Source = sSQL
crs.Open
'
Do Until crs.EOF
  :
  DBの項目にセット処理
  :
crs.Update     ←エラー発生
crs.MoveNext
Loop
crs.Close

1/2

88 名前:デフォルトの名無しさん mailto:sage [2012/02/06(月) 06:59:45.09 ]
2/2

DBはMySQLをODBCで使用しています
Updateのところでエラーが発生します
実行時エラー '-2147217864 (80040e38)':
行が見つからなかっため、更新できません。列の値は最後に読み込まれた後で変更された可能性があります。

OpenしてからUpdateまでただ項目をセットしているだけでカーソルを移動させていません
項目のセット処理を削除するとエラーは出ません
ただの ○○=×× という処理でカーソルが移動するとは思えないのですがどんな問題があるのでしょうか?

89 名前:デフォルトの名無しさん [2012/02/06(月) 11:02:10.59 ]
ADOのUpdateコマンドではなくSQLのupdate文を
その例で言えば
crs.Execute updateのsql文
という書き方でいつもExcelからmysqlに対してやってる
そのやり方ではどうなの?

まぁ続けるとスレ違いと騒ぎ出す野郎が多そうだから
mougのDB板で聞いてみたら?

90 名前:デフォルトの名無しさん mailto:sage [2012/02/06(月) 20:30:01.60 ]
>>89
レスどうもです
>crs.Execute updateのsql文
この方法でやってみます
もし上手くいかなかったらDB板で聞くことにします
ありがとうです

91 名前:84 mailto:sage [2012/02/07(火) 02:38:18.51 ]
>>85
なるほど。ありがとうございます。
>>86
ワロタ

92 名前:デフォルトの名無しさん mailto:sage [2012/02/07(火) 04:59:35.62 ]
それ主キーがないとかで行を特定できてないだけじゃないのか

93 名前:デフォルトの名無しさん [2012/02/07(火) 12:04:22.02 ]
質問です。
「初項(セル B3 の値)と公差(セル C3 の値)を元にして, セル範囲 B5:G5 に等差数列の値を入力する
マクロ「等差数列」を定義せよ」
という課題があるのですが、何から手を付ければいいのか分かりません。
よろしければご教授お願いします。

94 名前:デフォルトの名無しさん mailto:sage [2012/02/07(火) 12:13:41.21 ]
公式にぶちこめ

95 名前:デフォルトの名無しさん mailto:sage [2012/02/07(火) 15:15:08.32 ]
>>93
おっぱい見せて

Option Explicit
Private Sub マクロ等差数列()
  Dim 初項 As Double
  Let 初項 = Application.ThisWorkbook.ActiveSheet.Range("B3").Cells(1, 1).Value
  Dim 公差 As Double
  Let 公差 = Application.ThisWorkbook.ActiveSheet.Range("C3").Cells(1, 1).Value
  Dim 数列1番目 As Double
  Let 数列1番目 = 初項
  Application.ThisWorkbook.ActiveSheet.Range("B5").Cells(1, 1).Value = 数列1番目
  Dim 数列2番目 As Double
  Let 数列2番目 = 数列1番目 + 公差
  Application.ThisWorkbook.ActiveSheet.Range("C5").Cells(1, 1).Value = 数列2番目
  Dim 数列3番目 As Double
  Let 数列3番目 = 数列2番目 + 公差
  Application.ThisWorkbook.ActiveSheet.Range("D5").Cells(1, 1).Value = 数列3番目
  Dim 数列4番目 As Double
  Let 数列4番目 = 数列3番目 + 公差
  Application.ThisWorkbook.ActiveSheet.Range("E5").Cells(1, 1).Value = 数列4番目
  Dim 数列5番目 As Double
  Let 数列5番目 = 数列4番目 + 公差
  Application.ThisWorkbook.ActiveSheet.Range("F5").Cells(1, 1).Value = 数列5番目
  Dim 数列6番目 As Double
  Let 数列6番目 = 数列5番目 + 公差
  Application.ThisWorkbook.ActiveSheet.Range("G5").Cells(1, 1).Value = 数列6番目
End Sub

96 名前:デフォルトの名無しさん [2012/02/07(火) 16:41:05.20 ]
すみません、ワードのVBAについてはどこか質問スレってありませんでしょうか?



97 名前:デフォルトの名無しさん mailto:sage [2012/02/07(火) 17:30:37.03 ]
>>96
専門スレはないのでここで聞いてみる

Word(ワード)総合相談所 Part21
toro.2ch.net/test/read.cgi/bsoft/1319313721/

98 名前:デフォルトの名無しさん mailto:sage [2012/02/07(火) 17:46:04.08 ]
ない
場違い承知・まともな回答返ってこない前提でここかパワポVBAスレッドで聞いてアレンジするか
ググって見つかる掲示板利用するしか

99 名前:デフォルトの名無しさん mailto:sage [2012/02/07(火) 17:48:36.97 ]
(*ノノ)イヤン

100 名前:デフォルトの名無しさん mailto:sage [2012/02/07(火) 17:51:41.95 ]
>>95
>おっぱい見せて
さろんへ行け。

101 名前:デフォルトの名無しさん mailto:sage [2012/02/07(火) 17:51:42.53 ]
VBEで入力した全角文字が片っ端から自動で確定されて日本語入力できないんですが、仕様ですか?

102 名前:デフォルトの名無しさん [2012/02/07(火) 21:11:34.07 ]
>>97-98 ありがとう、ダメ元ですがエクセル場合はこーする、でも構わないので聞いてみます。
検索対象文字列の手前に改行を入れる、というVBAをつくろうとしています。

物:いちご物:みかん物:バナナ

となってる文章を

物:いちご
物:みかん
物:バナナ

と整形したいため、「物:」を検索し、その手前で改行を入れるVBAを作りたいです。
以下は自分で作ってみたものの、物:そのものを消して改行を3発入れてしまう駄作です。
Sub 検索()
With Selection.Find
.Text = "物:"
.Replacement.Text = ""
.Forward = True
.Wrap = wdFindContinue
.Format = False
.MatchWildcards = True
Do While .Found = True
If .Execute(FindText:="物:", Forward:=True, Format:=True) = True Then
         Selection.TypeParagraph
         Selection.TypeParagraph
        Selection.TypeParagraph
Else
End If
Exit Do
Loop
End With
エクセルならこーする、ワードは知らん。でも構いませんのでご教示頂けると幸いです。

103 名前:デフォルトの名無しさん mailto:sage [2012/02/07(火) 21:24:17.08 ]
Selection.TypeParagraphが三つあるから改行がみっつ入るんじゃないのか?
それひとつにしてそのあと"物:"追加すればいいんじゃね

つか物:を置換してマクロ記録すればすぐわかるような


104 名前:デフォルトの名無しさん [2012/02/07(火) 21:36:32.82 ]
>>103
回答ありがとうございます。
例で出したソースは例えで、「物:」実際は数字や日付、名前のような動的なものが入ります。
なので静的に「物:」を後から足すという手法が使えません。
さらに、実際は改行は1発ではなく、間に3行欲しいので3発入れる必要があります。

例えが下手で申し訳ありません。

105 名前:デフォルトの名無しさん mailto:sage [2012/02/07(火) 21:48:44.82 ]
データの整理をVBAで行うことを考えている初心者です
VBAを試しに書いて実行してから保存をしてみたところ、VBAによって行われたシート側の改変まで保存されてしまうようなのですが、
コードの部分だけを保存する方法はないでしょうか?

106 名前:デフォルトの名無しさん mailto:sage [2012/02/07(火) 21:51:57.10 ]
>>93
斜め上から

Sub 等差数列()
  Range("B5") = Range("B3")
  Range("C5") = Range("B3") + Range("C3")
  Range("B5:C5").AutoFill Destination:=Range("B5:G5")
End Sub




107 名前:デフォルトの名無しさん mailto:sage [2012/02/07(火) 21:57:15.58 ]
>>105
VBAを行うファイルとデータファイルとを別々にスレばいい。
今は同じブック内でやってんでしょ?

108 名前:デフォルトの名無しさん mailto:sage [2012/02/07(火) 21:59:38.02 ]
>107
なるほど、それは盲点でした
どうもありがとうございます

109 名前:デフォルトの名無しさん mailto:sage [2012/02/07(火) 22:15:08.83 ]
>>106
オートフィルメソッドなんか使わんでも数式は代入だけでコピーできる

Sub 等差数列()
 Range("b5") = "=b3"
 Range("c5:g5") = "=b5+$c$3"
End Sub

さらに短かく

Sub 等差数列2()
 Range("b5:g5") = "=$b$3+$c$3*(column()-2)"
End Sub

110 名前:デフォルトの名無しさん mailto:sage [2012/02/07(火) 23:20:14.94 ]
>>109
それ 94 の方法でしょ

111 名前:デフォルトの名無しさん mailto:sage [2012/02/07(火) 23:50:08.62 ]
>>102
>>97
または
mougでもいけばいいんじゃない

With Selection.Find
Replacement.ClearFormatting
.Text = "物"
.Replacement.Text = vbCr & "物"
.Execute Replace:=wdReplaceAll
End With

112 名前:デフォルトの名無しさん [2012/02/08(水) 00:33:54.14 ]
>>95,>>106,>>109,>>110
の方々、ありがとうございます。とても助かります。
もうひとつ質問があるのですが、
・選択したセル範囲に対して、
   a.空白セルの場合には背景色を黄色( RGB(255,255,0) )にする
   b.空白でないセルの場合は背景色を色なし( xlColorIndexNone )にする
 マクロ「チェック」を書きたいのですが、どのようにすればいいのでしょうか。

113 名前:デフォルトの名無しさん mailto:sage [2012/02/08(水) 03:01:53.56 ]
>>112
順番は逆だが気にするな
中学か高校の情報の授業なんだろうが先生が期待している回答ではないかと

Sub チェック()
With Selection
  .Interior.Pattern = xlNone
  .SpecialCells(xlCellTypeBlanks).Interior.Color = RGB(255, 255, 0)
End With
End Sub


114 名前:デフォルトの名無しさん mailto:sage [2012/02/08(水) 03:16:33.90 ]
>>112
Sub チェック()
  Selection.Interior.Color = -4142
  Selection.SpecialCells(4).Interior.Color = 65535
End Sub

115 名前:デフォルトの名無しさん [2012/02/08(水) 04:11:01.60 ]
>>111
スレチの質問にヒントありがとうございます。
しかし実際は>>104なので、"物"とすることができません。
具体的には2ちゃんのレス番、名前欄手前に3つ改行を入れたいのです。

Sub TEST()
With Selection.Find
.MatchSoundsLike = False
.MatchFuzzy = False
.MatchWildcards = True

.Text = "[0-9]{1,3} :* ??:??:??.?? ID:????????"
.Replacement.Text = vbCr & vbCr & vbCr & "ここに何か".
.Execute Replace:=wdReplaceAll
End With
End Sub

検索結果をそのまま持ってくるような関数は無いでしょうか?
上記"ここに何か"部分にそれを入れれば上手く動きそうな気がします。

116 名前:デフォルトの名無しさん mailto:sage [2012/02/08(水) 07:28:55.58 ]
>>115
>>97



117 名前:デフォルトの名無しさん [2012/02/08(水) 16:02:40.64 ]
>>113,>>114
ありがとうございます!

118 名前:デフォルトの名無しさん [2012/02/08(水) 16:14:10.84 ]
>>116
ありがとうございます。>>111さんに教えて頂いたmougにて有用な回答を得て解決出来ましたので
エクセルでも応用が利くかもしれないので、方法を貼っておきます。

.Replacement.Text = "^p^p^p\1"

とすることで、\1が置換後の文字列をそのまま使ってくれる事を教わりました。
これで解決することが出来ました。

以上です。ご回答頂き本当にありがとうございました。

119 名前:デフォルトの名無しさん mailto:sage [2012/02/08(水) 23:04:47.66 ]
お邪魔します。
OS:WinXP-SP2
Ver:Excel2002です
目的:シートAとBの特定範囲を一括して印刷プレビュー

Sheets(Array("A", "B")).Select
Range("A1:F59").Select
Selection.PrintPreview
Sheets("C").Select

と入れてシートAとBのA1:F59の印刷プレビューを開きたいのですが
この命令を実行するとシートAのA1:F59のプレビューしか開けません。
シートAとBを一括してプレビューさせるには何が足りないのでしょうか?

120 名前:デフォルトの名無しさん mailto:sage [2012/02/08(水) 23:58:52.00 ]
>>119
ActiveWindow.SelectedSheets.PrintPreview

121 名前:デフォルトの名無しさん mailto:sage [2012/02/09(木) 00:17:23.02 ]
>>119
Worksheet オブジェクト(普通のシート)には PrintPreview メソッドが存在する、よってシートを選択してプレビューできる
sheets オブジェクト(複数のシートを保持できる)には PrintPreview メソッドが存在する、よって複数のシートを選択してプレビューできる
range オブジェクトには PrintPreview メソッドが存在する、よって範囲を選択してプレビューできる
range オブジェクトは同一シート内なら複数の範囲を保持できる、よって同一シート内なら複数の範囲をプレビューできる

ただし、Excel には複数のシートをまたがる複数の Range を保持できるオブジェクト自体が存在しない
そのため、それに対応する PrintPreview メソッドも存在しない

たぶん

122 名前:デフォルトの名無しさん mailto:sage [2012/02/09(木) 00:36:45.70 ]
>>119
PageSetupを変更して良いなら
↓はどう?

Sheets("A").PageSetup.PrintArea = "A1:F59"
Sheets("B").PageSetup.PrintArea = "A1:F59"
Sheets(Array("A", "B")).PrintPreview

123 名前:119 mailto:sage [2012/02/09(木) 11:32:11.25 ]
>>120-122
ありがとうございました。
最終的にこうなりました。

Sub 印刷プレビュー()
'セルB55の数値からシート印刷か部分印刷かを判断
If Range("B55") <> "" Then
'B55に数値が存在するならばシート印刷
Sheets(Array("請求書", "見積書")).PrintPreview
Else
'B54に数値が存在しなければ部分印刷
Sheets("請求書").PageSetup.PrintArea = "A1:F59"
Sheets("見積書").PageSetup.PrintArea = "A1:F59"
Sheets(Array("請求書", "見積書")).PrintPreview
'印刷範囲を初期化
    Sheets("請求書").PageSetup.PrintArea = "A1:F119"
Sheets("見積書").PageSetup.PrintArea = "A1:F119"
End If
End Sub

124 名前:デフォルトの名無しさん [2012/02/09(木) 17:07:00.03 ]
Dim 変数 as Range
このようにオブジェクト変数を使いセルを代入すると
その情報の中にそのセルの上位のシートやブックも一緒に保存されてるんですか?

125 名前:デフォルトの名無しさん mailto:sage [2012/02/09(木) 18:46:47.98 ]
>>124
たしかParentプロパティとかに入ってたと思う。

126 名前:124 [2012/02/09(木) 19:08:28.56 ]
Parentプロパティって何でしょうか?
つまりそのRange型変数には入ってるってこと?

その特定のセルの場所を保存するには
ブック型変数(Dim〜as Workbook)、シート型変数(Dim〜as Worksheet)、セル型変数(Dim〜as Range)の3つが必要かと思ってたけど
セル型ひとつで済むならかなり楽だけど、違うのかな?



127 名前:125 mailto:sage [2012/02/09(木) 19:41:53.50 ]
たとえば、こんな風にやってみると
レンジ型変数からシート名とブック名も取得できる
でもこんなことするより
シートやブックもオブジェクト変数に代入しちゃう方が早くないか?

Sub test()
Dim Rng As Range
Set Rng = ThisWorkbook.Sheets(1).Cells(1, 1)
Debug.Print Rng.Parent.Name
Debug.Print Rng.Parent.Parent.Name
End Sub

128 名前:125 mailto:sage [2012/02/09(木) 19:49:11.26 ]
>>126
ごめん、後半読んでなかった
セル範囲の指定をRange型変数ひとつでできないか、という話だったのね。
Range型変数に代入されたセル範囲はRange型変数だけで特定できるから
そういう意味ではWorkBook型やWorkSheet型の変数は不要だよ。

てっきりブックやシートの指定もレンジ型一つで全部済ませたい
ってことかと思ってたよ
(>>127で書いたとおりそれもできることはできるけど、
記述が長くなるからあんまりメリットを感じない。)






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

前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