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


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で書いたとおりそれもできることはできるけど、
記述が長くなるからあんまりメリットを感じない。)

129 名前:デフォルトの名無しさん [2012/02/09(木) 22:17:32.76 ]
バイナリファイルを読み込んでデータの中の文字列を探したいと思ってます。
バイト配列と文字列を比較するためにしなくてはいけないのですが、
型を合わせる方法がわかりません。 バイト配列から文字列、また
文字列からバイト配列に変換する方法を教えてください。

よろしくお願いします。



130 名前:デフォルトの名無しさん mailto:sage [2012/02/09(木) 23:42:11.88 ]
>>129
バイナリファイルを文字列に変換して処理する例(すべてのバイトをを &H0000〜&H00FF のUnicode文字として変換)

Const adTypeBinary = 1
Sub Foo()
 bin = LoadBin("D:\misc\a.txt")
 n = GetBinSize(bin)
 Text = ""
 For i = 0 To n - 1
  Text = Text + ChrW(CodeAt(bin, i))
 Next
 index = InStr(Text, ChrW(&HFF))
 MsgBox "最初に見つけた &HFF の位置: " + CStr(index)
 index = InStr(Text, "hello")
 MsgBox "最初に見つけた hello の位置: " + CStr(index)
End Sub
Function LoadBin(path)
 Set stm = CreateObject("ADODB.Stream")
 stm.Type = adTypeBinary
 stm.Open
 stm.LoadFromFile (path)
 LoadBin = stm.Read()
 stm.Close
End Function
Function GetBinSize(bin)
 GetBinSize = LenB(bin)
End Function
Function CodeAt(bin, index)
 CodeAt = AscB(MidB(bin, index + 1, 1))
End Function

131 名前:デフォルトの名無しさん mailto:sage [2012/02/09(木) 23:44:26.34 ]
>>129
>ANSI 形式のバイト型配列を文字列に変換する場合は、StrConv 関数を使用してください。
>Unicode 形式の配列を変換する場合は、代入式を使用してください。
以上 StrConv 関数のヘルプから

それ以外の文字コードだった場合はVBAだけで簡単にやる方法は多分ない

132 名前:デフォルトの名無しさん mailto:sage [2012/02/10(金) 00:19:32.83 ]
文字コードによるけど、バイナリファイルだって最初っからテキストモードでオープンすりゃええがな

133 名前:126 [2012/02/10(金) 00:29:11.59 ]
>>127>>128
すばらしい解説ありがとうございます。
なるほど、Rangeでもシートやブックの情報を裏で持ってたんですね。
頭スッキリしました。
こういうスッキリ感がプログラムという複雑化しやすいことを扱うにはものすごく重要ですしね。
ということはRangeのオブジェクト変数はものすごく便利ですね。

134 名前:デフォルトの名無しさん mailto:sage [2012/02/10(金) 00:53:51.04 ]
間違ってた
○ChrW
×Chr

135 名前:デフォルトの名無しさん mailto:sage [2012/02/10(金) 00:55:28.19 ]
>>134>>130についてです

136 名前:129 [2012/02/10(金) 01:23:07.49 ]
>>130>>134>>135
具体的なサンプルありがとうございます。
SJISの場合はChrでUTFの場合はChrW
を使えばよいのでしょうか?

>>131
たしかSJISだったと思うのでStrConvを使えば
比較できるということですね。
ヘルプを確認してみます。

>>132
テキストモードでオープンすると正しく取得できない
値があるのでバイナリモードでオープンする方法を検討しています。

137 名前:130 mailto:sage [2012/02/10(金) 01:44:11.61 ]
>>136
>SJISの場合はChrでUTFの場合はChrW
違う
ChrWは単なる間違い

130の例で Shift_JIS の "あ" を検索したいなら、
Chr(&H82) + Chr(&HA0)
を検索する必要がある
面倒だけど、その代わりバイト並びさえ分かっていれば変換による情報落ちの心配なしにどんなコードでも処理できる、という例

138 名前:デフォルトの名無しさん [2012/02/10(金) 11:13:23.28 ]
VBAの基本的な文法はマスターしたのですが
Error処理のしかた
プロシージャのCallの呼び方
きれいなコードの書き方
イミディエト窓の使い方
バグフィックスのしかた

など、普通の入門書にはほとんど書かれていないこともマスターしたいです
そのためのいい本はありますか?

139 名前:デフォルトの名無しさん [2012/02/10(金) 13:05:03.46 ]
これは正しいですか↓

-------------------------------------------------
LoadするとInitializeイベントが発生して、
ShowでActivateイベントが発生する。
HideするとDeactivateイベントが発生して、
UnloadでTerminateイベントが発生する。

LoadしないでShowすると自動的にLoadされてShowするし、
HideしないでUnloadしても自動的にHideされてUnloadする。




140 名前:デフォルトの名無しさん [2012/02/10(金) 13:07:14.91 ]
>>139
神!

こういう整理された情報こそ実用的であり非常に有用。
みんなも>>139みたいな情報を共有しあうために貼り付けようじゃないか!

141 名前:デフォルトの名無しさん mailto:sage [2012/02/10(金) 13:34:27.98 ]
すくなくとも
>ShowでActivateイベントが発生する。
>HideするとDeactivateイベントが発生して、
は正しくない
Showした結果アクティブになればActivateイベントが発生するし
Hideした結果アクティブじゃなくなればDeactivateイベントが発生する
HideしたからってかならずDeactivateが発生するわけじゃない

142 名前:デフォルトの名無しさん [2012/02/10(金) 14:42:14.40 ]
Workbooks(x)のxを
そのworkbookの名前から取り出す方法を教えてください。

143 名前:デフォルトの名無しさん mailto:sage [2012/02/10(金) 15:20:21.90 ]
取り出す必要なんてない。

144 名前:デフォルトの名無しさん mailto:sage [2012/02/10(金) 16:14:52.80 ]
>>142
WorkbookオブジェクトにはIndexプロパティがないので直接求めるのは無理
Workbooksコレクションをループで順番に見ていくしかない

けど>>143の言う通り、インデックス番号なんかわからなくてもプログラムは書ける
何がやりたいの?

145 名前:142 [2012/02/10(金) 16:31:35.11 ]
長いコードを短くしたいの。

146 名前:デフォルトの名無しさん [2012/02/10(金) 16:33:32.37 ]
コピペをVBAコードて書く場合、
なぜ対象オブジェクトはシートなんですか?
普通に考えてセルであるべきだ。
納得される説明・理由が聞きたいのですが。

147 名前:デフォルトの名無しさん mailto:sage [2012/02/10(金) 17:11:39.81 ]
>>145
短くしたいなら、
dim book as workbook
set book = workbooks("bookname.xls")
'以降bookを使ってコードを書く

の方が良くない?

148 名前:デフォルトの名無しさん mailto:sage [2012/02/10(金) 17:34:20.86 ]
>>145
それならオブジェクトを変数に入れた方がいい
短くなるだけでなく、処理も少し軽くなる
具体例は>>147

コードを短くする方法はいくつかあって、Withを使うのも効果的

149 名前:デフォルトの名無しさん mailto:sage [2012/02/10(金) 19:10:47.12 ]
>>146
そんなことをここで聞かれてもな
マイクロソフトに聞け

ただ、おまえが普段どんなコードでコピペしてるかしらんが
少なくとも俺はコピーするときはRangeが対象なことがほとんどだし
Rangeに張りつけたければPasteSpecialも使えるぞ



150 名前:デフォルトの名無しさん [2012/02/10(金) 19:38:29.05 ]
VBAでVLOOKUPのようなことをしたい場合どうしてますか?

151 名前:デフォルトの名無しさん [2012/02/10(金) 19:41:55.38 ]
VBAで改行を文字列にするにはどうすればいいですか?

152 名前:デフォルトの名無しさん mailto:sage [2012/02/10(金) 19:49:24.89 ]
>>150
あなたはどうしてますか

153 名前:デフォルトの名無しさん mailto:sage [2012/02/10(金) 19:50:09.64 ]
>>151
ん?

154 名前:デフォルトの名無しさん [2012/02/10(金) 19:57:04.82 ]
>>152
使い方をしらないからまだ使ったことない。
>>151
vbLINEかvbCRみたいなのなかったっけ?

VBAでワークシート関数を使いたいとき、Application.WorkSheetFunctionを使えばいいと書いてあるけど
どんな関数でもVBAでも使えるのですか?
さらにWorkSheetFunctionのあとは単にワークシート関数の単語を書けばいいだけ?

155 名前:デフォルトの名無しさん [2012/02/10(金) 20:04:05.38 ]
ワークシートとVBAで混乱するもの

FindとInstr
TextとFormat
DateとToday
その他多数

これみんなどうやって記憶してるの?

156 名前:デフォルトの名無しさん mailto:sage [2012/02/10(金) 20:08:37.99 ]
>>150
VBAでもVLOOKUP関数は普通に使える

157 名前:デフォルトの名無しさん mailto:sage [2012/02/10(金) 20:09:39.85 ]
>>154
オブジェクトブラウザで、WorksheetFunctionオブジェクトを見れば良い。
Application.WorksheetFunctionプロパティが返してくるのがこいつだから。
別にExcel固有の記述とかそういうものじゃない。

158 名前:デフォルトの名無しさん mailto:sage [2012/02/10(金) 20:09:50.18 ]
>>151
vbCr
vbLf
vbCrLf

159 名前:デフォルトの名無しさん mailto:sage [2012/02/10(金) 20:09:57.92 ]
なんだか真面目に質問しているようにみえないんだが
気のせい?



160 名前:デフォルトの名無しさん mailto:sage [2012/02/10(金) 20:12:30.38 ]
>>155
使ってれば自然に覚える
間違えばエラーが出るから、それを見て直す
忘れたらヘルプを見る、Googleで検索する

せっかくコンピューターが色々と助けてくれるんだから
完璧に暗記することよりも、それを活用する方法を考えた方が応用範囲が広くなる

161 名前:デフォルトの名無しさん [2012/02/10(金) 20:20:58.66 ]
>>156
ありがとう。それはWorksheetFunctionを使って?
>>157
ありがとう。はじめオブジェクトブラウザを見てみた。たくさん入ってる関数は全部ワークシートの関数なんだね。
でも例えば単純なSum関数だとActivecell=Application.WorksheetFunction.Sum("A1:E5")と書けば
そのセルに”=Sum("A1:E5")”と入力されるってことで合ってます?
>>158
ありがとう。それだ。
>>159
今後仕事でVBA使うので復習中。
>>160
確かにそうですね。丸暗記はやめます。しかし例えば6か月くらいBAを全く使わないと基本機能すら忘れるね。
その忘れたときに思い出すための対策(例えば基本機能のメモと特殊的機能の一覧をノートにまとめるとか)は何かしといたほうがいいと感じてます。

162 名前:デフォルトの名無しさん mailto:sage [2012/02/10(金) 20:25:47.45 ]
>合ってます?

聞く前に試せば済むこった

163 名前:デフォルトの名無しさん [2012/02/10(金) 20:30:50.24 ]
あなたの回答力も試したいと思って。

164 名前:デフォルトの名無しさん mailto:sage [2012/02/10(金) 20:34:24.98 ]
やはりそうでしたか

165 名前:デフォルトの名無しさん [2012/02/10(金) 20:34:45.43 ]
>>162
試してもエラーが出るんですけど。エラいこっちゃ。

166 名前:デフォルトの名無しさん mailto:sage [2012/02/10(金) 20:36:28.19 ]
>>165
WorksheetFunction.Sum(Range("a1:e5"))

167 名前:デフォルトの名無しさん [2012/02/10(金) 20:37:47.13 ]
Activecell=Application.WorksheetFunction.Sum(Range("A1:E5"))
ならうまくいきました。
しかもセルには数式じゃなく結果の数値のみが表示されてる。

もしVBAでセルに数式そのものを入力したい場合はどうすればいいの?

168 名前:デフォルトの名無しさん mailto:sage [2012/02/10(金) 20:38:30.47 ]
>>167
ActiveCell.FormulaLocal = "=Sum(A1:E5)"

169 名前:デフォルトの名無しさん [2012/02/10(金) 20:38:34.59 ]
>>166
1分19秒先を越された・・・・・・



170 名前:デフォルトの名無しさん [2012/02/10(金) 20:39:38.10 ]
>>168
ありが十匹。
ところで単にActiveCell= "=Sum(A1:E5)"、または、ActiveCell.Value= "=Sum(A1:E5)"、でも問題ないですか?

171 名前:デフォルトの名無しさん mailto:sage [2012/02/10(金) 20:41:56.18 ]
>>170
試してみたらどうだ

172 名前:デフォルトの名無しさん mailto:sage [2012/02/10(金) 21:32:09.71 ]
あなたのVBA力と回答力を試しているんですが

173 名前:デフォルトの名無しさん [2012/02/10(金) 21:47:11.33 ]
ワークシート関数のSumと
VBaのApplication.WorksheetFunction.のあとのSumでは
そのあとに続くコードが微妙に違うの?
Vlookupの場合は?
まさか関数ごとに全部覚えないといけないの?

>>171
できた。

174 名前:デフォルトの名無しさん mailto:sage [2012/02/10(金) 21:52:43.03 ]
>>173
> Vlookupの場合は?

試してみたらどうだ

175 名前:デフォルトの名無しさん [2012/02/10(金) 22:03:27.91 ]
VBAのコードを使って、ファイルやフォルダを自由自在に操ってみたいと思ってます。

[ファイル]と[フォルダ]のそれぞれ2つについて、
[移動][コピー][削除][名前の変更]の4つはどうコードで記述すればいいか(つまり2x4=8個について)、
どなたか教えていただけませんか?
それが載ってあるサイトのURLでもいいです。

(*[フォルダ]の[削除]は、もしその中にファイルやフォルダがあったらそれも含めて全部削除するとします)

176 名前:デフォルトの名無しさん mailto:sage [2012/02/10(金) 22:09:50.59 ]
>>175
VBA力と回答力を試しているんですか

177 名前:デフォルトの名無しさん mailto:sage [2012/02/10(金) 22:22:14.32 ]
>>175
んなもん、それぞれぐぐっていけばいいだけの話だろうが

Office TANAKA - トップページ
officetanaka.net/
officetanaka.net/excel/vba/filesystemobject/index.htm

あたり読めば?

178 名前:デフォルトの名無しさん mailto:sage [2012/02/11(土) 07:56:33.53 ]
あなたの検索力を試したんですよ
まあまあですね

179 名前:デフォルトの名無しさん [2012/02/11(土) 17:49:13.59 ]
>>178
くやしいのうwwwwwwwwwくやしいのうwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww



180 名前:デフォルトの名無しさん [2012/02/11(土) 19:00:02.04 ]
"w" も使い過ぎると逆効果だなあ。

181 名前:デフォルトの名無しさん mailto:sage [2012/02/11(土) 22:54:53.04 ]
図形を含んだシートのコピーに関して教えてください。
セル範囲を指定してコピー、別シートに貼り付けをしているのですが、
コピー自体はできるのですが図形の大きさが変わったり、印刷した時の大きさが違ったり
してしまいます。
全く同じにコピーするにはどうすればいいのでしょうか?
シート自体のコピー挿入の方がいいのでしょうか?
よろしくお願いします。

182 名前:デフォルトの名無しさん mailto:sage [2012/02/12(日) 00:28:06.43 ]
>>181
図形の生成はマクロでやってる?
そうならコピペせなんでも生成時のアドレス変えてもう一つ作ればいいんじゃ?
もし、マクロで生成したものでない図形を〜って話なら
図形のプロパティでセルの移動とかにあわせて大きさを変えないようにすればいけるかと。
ペースト先セルの列の幅やら行の高さやらがコピー元と違うと大きさ修正されちゃうし。

183 名前:デフォルトの名無しさん mailto:sage [2012/02/12(日) 03:55:14.43 ]
エスパー(マクロでやってないな)

184 名前:デフォルトの名無しさん mailto:sage [2012/02/12(日) 14:52:49.17 ]
こんにつわ、他人から貰ったExcelファイルがどういうコードで動いてるか見るにはどうすればいいのじゃ?

185 名前:デフォルトの名無しさん [2012/02/12(日) 14:59:31.37 ]
>>184
Alt+F11

186 名前:デフォルトの名無しさん mailto:sage [2012/02/12(日) 15:19:23.68 ]
ありがとうちゃん

187 名前:129 [2012/02/12(日) 23:35:21.88 ]
>>137
全角文字、たとえば”あ”を&H82 + &HA0に変換する場合は
どうすればよいのでしょうか?
以下のように記述を比較してみましたが一致しませんでした
ご教授おねがいします。

msg = Chr(Asc("あ"))
msg2 = Chr("&H82") + Chr("&HA0")

188 名前:デフォルトの名無しさん mailto:sage [2012/02/12(日) 23:40:08.67 ]
>>187
MsgBox Hex(Asc("あ"))


189 名前:デフォルトの名無しさん [2012/02/12(日) 23:52:57.06 ]
他Bookに記述してるマクロを実行(あるいはSubやFunctionを呼び出し)することって
できる?
頻繁にやるのは望ましくない?



190 名前:デフォルトの名無しさん mailto:sage [2012/02/13(月) 00:22:53.83 ]
>>189
たとえばBook1.xlsmのThisWorkbookにあるsub testを呼び出すなら
Application.Run "Book1.xlsm!ThisWorkbook.test"
でできる
頻繁どころか、アドインでもない限り他ブックのマクロ実行させるのはまったく好ましくない

191 名前:デフォルトの名無しさん [2012/02/13(月) 00:23:18.72 ]
マクロでコントロールを状況に応じて増やしたいんだけど
そういうことってできる?

たとえば5と入力したら別Window(Form)を開いて
そこに5つのラベルとテキストボックスを挿入したいの。

192 名前:デフォルトの名無しさん mailto:sage [2012/02/13(月) 00:26:32.22 ]
なんでマルチポストすんの?

193 名前:デフォルトの名無しさん mailto:sage [2012/02/13(月) 00:57:04.90 ]
>>189
もちろんできる
複数のブックから使用するマクロを別ブックにしたり、
複数のブックのマクロを呼び出すメニュー用のブックを作ったり、
xlsxのファイルで使用するためのマクロを別ブックにしたり、
いろいろ

ExcelVBAの考え方としては、データを置くワークシートと、
プログラムを置く標準モジュールをどう配置するか


194 名前:187 [2012/02/13(月) 01:11:58.07 ]
>>188
ありがとうございます。

MsgBox Hex(Asc("あ"))  は 82A0と表示されましたが
MsgBox Hex(Asc(Chr(&H82) + Chr(&HA0))) が 8145になってしまいましたが
MsgBox Hex(Asc(Chr(&H82A0)) では 80A0と表示されたのでこちらとは一致させることができました。

全角文字の場合には &H80A0 のような書きかたが正しいのでしょうか?

しかし >>130 のコードで
”あいうえお”を検索したく
msg = Chr(&H82) + Chr(&HA0) + Chr(&H82) + Chr(&HA2) + Chr(&H82) + Chr(&HA4) + Chr(&H82) + Chr(&HA6) + Chr(&H82) + Chr(&HA8)
InStr(Text, msg)
とした場合には検索できるのですが
msg = Chr(&H82A0) + Chr(&H82A2) + Chr(&H82A4) + Chr(&H82A6) + Chr(&H82A8)
InStr(Text, msg)
のような書きかたをした場合には検索できませんでした。

”あいうえお” を検索する場合にはどういう書きかたをすればよいのでしょうか?

195 名前:デフォルトの名無しさん mailto:sage [2012/02/13(月) 02:04:05.27 ]
「あいうえお」と書かれたテキストファイルを
>>130のコードに突っ込めば直ぐ解る。

196 名前:187 mailto:sage [2012/02/13(月) 02:53:20.17 ]
>>195
きさま、舐めとんかゴルァ

197 名前:デフォルトの名無しさん mailto:sage [2012/02/13(月) 19:33:16.74 ]
保存ダイアログが出たときに、特定のフォルダーが出るように下記の様に
書いたのですが、Win7 32bitでは希望通りの動きなのですが、64bitだと
マイドキュメントが選択された状態で表示されてしまいます。

xlAPP.GetSaveAsFilename(InitialFileName:=SaveDir & FileName)

64bit版でも指定したフォルダーを選択状態にさせるにはどうすればいいですか?
よろしくお願いします。

198 名前:デフォルトの名無しさん mailto:sage [2012/02/13(月) 19:57:03.92 ]
すみません。
コピーし忘れがありました。
一度保存すると、その時のフォルダーを保存しておいて、2回目からは
SaveDirに記憶したフォルダーを選択するようにしています。

SaveaDir = CurDir

そのために上記の様にして記憶するようにしています。
(このスレを読んで参考にしました。)

32bit版は変数の中身が変わるのですが、64bit版ではブックを読みだしたフォルダーから
変更されない感じです。
よろしくお願いします。

199 名前:デフォルトの名無しさん mailto:sage [2012/02/13(月) 20:18:43.27 ]
>>198
省略しすぎ。もう少しコードを見せられないの?



200 名前:デフォルトの名無しさん mailto:sage [2012/02/13(月) 21:24:43.24 ]
>>197
ディレクトリだけ?
ファイル名は正しく表示されるの?






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

前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