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


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

Excel VBA 質問スレ Part51



1 名前:デフォルトの名無しさん [2017/11/08(水) 11:26:30.13 ID:+KUB1/9hd.net]

スレ立ての際は一行目に
!extend:checked:vvvvv:1000:512
と入れてスレ立てして下さい

ExcelのVBAに関する質問スレです
コード書き込みや作成依頼もOK

※関連スレ
VBAなんでも質問スレ Part2
mevius.2ch.net/test/read.cgi/tech/1432173164/
Access VBA 質問スレ Part1
mevius.2ch.net/test/read.cgi/tech/1328536426/
Excel総合相談所 126
https://mevius.2ch.net/test/read.cgi/bsoft/1496487719/

※前スレ
Excel VBA 質問スレ Part50
mevius.2ch.net/test/read.cgi/tech/
VIPQ2_EXTDAT: checked:vvvvv:1000:512:----: EXT was configured 👀
Rock54: Caution(BBR-MD5:0be15ced7fbdb9fdb4d0ce1929c1b82f)


126 名前:デフォルトの名無しさん mailto:sage [2017/11/18(土) 17:21:41.22 ID:lwdaQlHz0.net]
UNCパスでそこは共有名であってフォルダ名じゃない気がするが

127 名前:デフォルトの名無しさん mailto:sage [2017/11/18(土) 17:56:31.65 ID:HVgorTjE0.net]
すいません wordのVBAです。 画像貼りつけて文字列の折り返しを背景にするのに下記では2行目で
描画の対象とならないオブジェクトが選ばれているためにtypeメソッドまたはプロパティは使用できません。
となりますが、どうしたらよいですか?

Selection.InlineShapes.AddPicture FileName:="a.jpg", SaveWithDocument:=True
Selection..ShapeRange.WrapFormat.Type=wdWrapBehind

128 名前:デフォルトの名無しさん mailto:sage [2017/11/18(土) 19:38:08.85 ID:+9+JGsY3H.net]
>>121
なんかややこしいですね。
共有名に "¥" をつけて初めて共有フォルダのルートフォルダとして認識される、と覚えておくことにします。

129 名前:デフォルトの名無しさん mailto:sage [2017/11/18(土) 22:21:46.28 ID:+9+JGsY3H.net]
立て続けにすんません。
onAction の引数について、全角英数記号が半角に解釈されて実行されてしまうのは既知の仕様でしょうか?
ひらがなカタカナは被害を受けないようです。
CommandBars.ActiveControl.Caption
CommandBars.ActiveControl.OnAction
あたりで変換前の文字列を救出できるようですが、、根本的対応はないのでしょうか。
上記で躓いてしまい、公式で情報をみつけられなかったもので、、

130 名前:デフォルトの名無しさん mailto:sage [2017/11/19(日) 10:05:19.39 ID:M3mw+ZdH0.net]
>>122
まずさ、Selection使うの辞めようぜ。
Hoge.Select
Selection.Fuga
という形が有ったらたいてい
Hoge.Fuga
という形にできる。

つまりね、大抵は選ぶ必要がない。
ある程度書ける人は選ぶ処理をいかに無くすかを考える。
そうすればApplication.ScreenUpdating=False使っても
速度が変わらなくなる。
ちらつき防止のために使うのが有用なのは変わらないんだけど。
.Selectを使うのはユーザーに明示的に場所を示す場合と、
本当にどうしようもない場合がごくまれにあるだけだ。

オブジェクトブラウザでShapeRangeとかWrapFormatを
調べてそこに何が(型)期待されてるかを調べる。
後は合わせれば良いだけだ。

131 名前:デフォルトの名無しさん mailto:sage [2017/11/19(日) 10:10:14.58 ID:M3mw+ZdH0.net]
>>124
"OnAction" "全角"でググると結構出てくるね。
コメント以外で日本語使うこと無いから遭遇する事無かったわ。

132 名前:デフォルトの名無しさん mailto:sage [2017/11/19(日) 11:46:20.87 ID:JvH46D6m0.net]
>>125
>.Selectを使うのはユーザーに明示的に場所を示す場合と、

「ユーザーが明示的に選択したオブジェクトを処理する場合」も追加願います

133 名前:デフォルトの名無しさん [2017/11/19(日) 11:56:21.06 ID:aexN4+ic0.net]
追加願いますって何を言ってるんだ???

134 名前:デフォルトの名無しさん mailto:sage [2017/11/19(日) 12:23:26.42 ID:JvH46D6m0.net]
>>128

>>125
>.Selectを使うのはユーザーに明示的に場所を示す場合と、
>本当にどうしようもない場合がごくまれにある 「だ け」 だ。

と言ってるから、もう一つのパターンもあるよ、と言ってるわけだが?



135 名前:デフォルトの名無しさん [2017/11/19(日) 12:30:59.55 ID:aexN4+ic0.net]
select使わない理由は誤作動の原因になるからの方が多いんじゃないか
もちろんパフォーマンスも大きく変わるけど、言うほど変わらない
それよりもコード上、何のブック、シートがactivateになっているかを把握する方が遥かにめんどくさい

136 名前:デフォルトの名無しさん mailto:sage [2017/11/19(日) 12:55:38.95 ID:YlgcavI50.net]
作ってるものが偏っているからActiveSheetやSelectionを使う機会がないだけで、
もっと操作補助的な面の強いマクロなら使う場面もあるかもしれない。

137 名前:デフォルトの名無しさん [2017/11/19(日) 12:57:36.65 ID:aexN4+ic0.net]
確かにコードの最後にcells(1,1).selectはよく書くけど、それ以外のselectは>>125の通り「本当にどうしようもない場合」だけだな
オートシェイプかなんかでsetできなかったような、忘れたけど

138 名前:デフォルトの名無しさん mailto:sage [2017/11/19(日) 13:53:20.81 ID:wFQIPa4T0.net]
IOと純粋関数部分を分けるようにと、Hな言語から学んだよ。

139 名前:デフォルトの名無しさん mailto:sage [2017/11/19(日) 13:59:20.49 ID:ZK6mPT5SM.net]
>>131
> もっと操作補助的な面の強いマクロなら使う場面もあるかもしれない。
まあそれが
> .Selectを使うのはユーザーに明示的に場所を示す場合と、
> 「ユーザーが明示的に選択したオブジェクトを処理する場合」
なわけだが

140 名前:デフォルトの名無しさん mailto:sage [2017/11/19(日) 16:16:58.30 ID:M3mw+ZdH0.net]
>>130
誤動作とか以前に無駄なことをしたくないという自然な考えがある。
Cells(1,1).Select
Cells(1,2).Select
Cells(1,1).Select
と書かれてたらなんじゃこれと思うだろ。

マクロの記録は操作を自然に記録してしまうけど、
やりたいことはそれじゃない。
それにコードも汚くなって読みたくないものになる。

141 名前:デフォルトの名無しさん mailto:sage [2017/11/19(日) 16:18:58.83 ID:8D87jpDPa.net]
ユーザーが明示的に選択したものに〜
ってのもぶっちゃけ運用の問題の気もするが
マクロ化の範囲にもよるんだけども
可能な限り避けるべきってのは正しいでしょ

142 名前:デフォルトの名無しさん mailto:sage [2017/11/19(日) 17:16:48.30 ID:JvH46D6m0.net]
>>136
>可能な限り避けるべきってのは正しいでしょ

そうなの?
実際それをやることは少ないけど、別に避けてるわけじゃないな。
「ボタンを押すと、選択しているセルの書式を〜する」なんて処理はたまにある。

143 名前:デフォルトの名無しさん mailto:sage [2017/11/19(日) 17:30:54.95 ID:SAgRzZs9a.net]
ユーザーが明示的に選択したものに処理を与えるってのはアリだとは思う。
でもそれはHoge.Selectでは無くてSelectionを使う場合だよね。

144 名前:デフォルトの名無しさん mailto:sage [2017/11/19(日) 17:35:35.45 ID:JvH46D6m0.net]
>>138
なるほど

最初のきっかけとなった>>125の1行目が、
>まずさ、Selection使うの辞めようぜ。

だったからずっと Selection のことを語っていた



145 名前:デフォルトの名無しさん mailto:sage [2017/11/19(日) 17:48:04.11 ID:lBNHVI9l0.net]
>>136
優先順位の問題でしょ
> ユーザーが明示的に選択したものに〜
って言う仕様の方が
> 可能な限り避けるべき
より優先されるのは当たり前

146 名前:デフォルトの名無しさん [2017/11/19(日) 17:50:02.84 ID:aexN4+ic0.net]
>>138
あぁそれはアリ
会社によっては多用するだろう

147 名前:デフォルトの名無しさん mailto:sage [2017/11/19(日) 20:49:12.88 ID:eK6D85VJ0.net]
wordのマクロ組んでる人おらんのかな?

148 名前:デフォルトの名無しさん [2017/11/19(日) 21:18:16.41 ID:aexN4+ic0.net]
>>122>>142
そもそもwordを使わない

あととりあえず動くコードを書いてくれ
Selection..ShapeR
ピリオドがニコあって邪魔

で、差し込んだ画像の文字列の折り返しってのが何がしたいのか良く分からん
テキストボックスなら分かるしそれで通るけど

149 名前:デフォルトの名無しさん mailto:sage [2017/11/19(日) 21:23:25.50 ID:eK6D85VJ0.net]
>>143 画像のレイアウトで背面にしたいんですよ。 なんかしらんけど動いて、なぜか前面で貼りつけられました。
なんかEXCELと勝手が違いますぬ・・・。

150 名前:デフォルトの名無しさん [2017/11/19(日) 21:27:01.10 ID:aexN4+ic0.net]
>>144
エクセルと勝手が違うんじゃなくて、ただただ猛烈に使いにくいだけ
で、上手く行ったので質問は終了ってこと?

151 名前:デフォルトの名無しさん mailto:sage [2017/11/19(日) 21:31:31.01 ID:eK6D85VJ0.net]
>>145 とりあえずは。 また多分色々とお伺いすることになると思いますが、

なにとぞよろしくお願いいたします。

152 名前:デフォルトの名無しさん mailto:sage [2017/11/19(日) 22:32:44.41 ID:Z3cAV0my0.net]
wordはスレ違いだけどな
あんまりvbaと親和性もないし
あくまで文書ツールだからな

153 名前:デフォルトの名無しさん [2017/11/19(日) 22:50:31.56 ID:1/mWyqVE0.net]
おいおいExcelかてただの文書ツールやぞw

154 名前:デフォルトの名無しさん [2017/11/19(日) 22:56:21.06 ID:aexN4+ic0.net]
>>148
釣りはほどほどに



155 名前:デフォルトの名無しさん mailto:sage [2017/11/19(日) 23:23:51.19 ID:lBNHVI9l0.net]
文書ツールとしてExcel使う奴はたくさんいるけど w

156 名前:デフォルトの名無しさん mailto:sage [2017/11/20(月) 08:54:30.90 ID:6BLE5ZLY0.net]
>>146
まず君が貼り付けたのは何かを考えよう。
マクロ記録が示すコードを見ればInlineShapeだろう。
InlineShapeを調べれば文字列の中の位置を指定した図形ということらしい。
要は10文字目に挿入とかさ。
InlineShapeにはWrapFormatプロパティは無い。
文字列の折り返しを背景にするというのは回り込み等を自動でやるわけでその結果文字が動くだろ。
それじゃ位置を指定したことにならない。
だから出来ない。

それじゃあどうするかというと、InlineShapeをShapeに変換するというのが1つ。
InlineShapeにはConvertToShapeというのがあるから、それをShapeで受けてやればShapeにはWrapFormatプロパティがある。
Dim iShp As InlineShape
Dim Shp As Shape
Set iShp=Document("hoge.doc").Characters(10).InlineShapes.AddPicture("C:¥fuga.jpg")
Set Shp=iShp.ConvertToShape
Shp.WrapText.Type=wdWrapThrough

しかしそもそも最初からInlineShapeじゃなくてShapeを貼り付ければ問題にならない。
Set shp=Documents("hoge.doc").Shapes.AddPicture("C:¥fuga.jpg")
shp.WrapText.Type wdWrapThrough

Shapeは位置を指定出来ないといっても何文字目という意味で指定出来ないだけで、Left、Top、Width、Heightでの位置指定はできる。

今回の問題もSelectionだったな。
何のオブジェクトを触ってるのかはっきりさせずに組んでるからエラーの意味も分からない。

157 名前:デフォルトの名無しさん [2017/11/20(月) 12:21:51.39 ID:phW/Gatbr.net]
>>150
そらそれが本来の使い方やもの
なに勘違いしてニヤニヤしとんねんお前
気色悪い奴だな

158 名前:デフォルトの名無しさん mailto:sage [2017/11/20(月) 13:11:30.03 ID:tncAZsVja.net]
>>152
Jカスこんなところでも下らねー釣りしてんじゃねえよ

159 名前:デフォルトの名無しさん mailto:sage [2017/11/20(月) 15:08:27.78 ID:6BLE5ZLY0.net]
WordVBAで使いにくいのは記録出来ても良さそうなものが記録出来ない所。
ただ、これはこっち

160 名前:ェ出来ても良さそうと勝手に思ってるだけでMS的にはまずい何かが有るのかもしれない。

それよりも困るのは
Debug.Print Typename(hoge)
とやってSelectionが帰ってくる所。

型を知りたいのにSelectionは無いだろう。
[]
[ここ壊れてます]

161 名前:デフォルトの名無しさん mailto:sage [2017/11/20(月) 17:44:20.81 ID:PC8rzjhFa.net]
>>154
型名調べる関数もうひとつあったよね
あんま使わんから忘れたけど

162 名前:デフォルトの名無しさん [2017/11/20(月) 19:16:12.47 ID:3EUEsxu/0.net]
>>154
笑ったw

163 名前:デフォルトの名無しさん [2017/11/20(月) 19:56:44.52 ID:HiJj2X0L0.net]
>>154
? typename(hoge)とやったら
Emptyと出てきたぞ。
あなた↓の頭と同じでカラッポ。

164 名前:デフォルトの名無しさん mailto:sage [2017/11/20(月) 21:46:53.19 ID:dynAF7sP0.net]
>>151 ありがとうございます。 じつはそれで解決しました。
マクロで記録したらinlineshapeで、なんやねんこれ?と理解していなかったことが原因でした。



165 名前:デフォルトの名無しさん [2017/11/20(月) 22:35:57.11 ID:bUEYENj70.net]
前スレ943様の下記ファイル、もう一度upしていただく訳にはいきませんでしょうか。
DLしようと思いながら、失念していて、先ほどしようとしたところ消えてしまっていました。
943様、お手数をおかけしますが何卒よろしくお願いいたします。

943デフォルトの名無しさん (ワッチョイ 06e9-FqSh)2017/11/05(日) 15:01:02.75ID:2uRc+T650>>944>>958
>>942
写真は辞めてくれ。見るのめんどくさい

出てきたからあげるわ
大体やりたいことはこれだと思う
・設定シートのB列に表示したいもの。C列は入力する文字を入れる
・入力シートのA1に「う」と入れて決定。リストが現れて「東京」「北海道」が現れるので選択する
もちろん「う」じゃなくても「東」なんかでもいい。場合によってはB列に「渋谷」とかいれてもいいかもしれない
https://dotup.org/uploda/dotup.org1380568.zip.html

自分で言うのも何だがこれ超便利。かなりオススメ

166 名前:デフォルトの名無しさん [2017/11/20(月) 23:57:02.00 ID:3EUEsxu/0.net]
こういう時はせめてエクセルアップロードできるアップローダーぐらい探してくると良いぞ

167 名前:デフォルトの名無しさん mailto:sage [2017/11/21(火) 02:44:24.85 ID:eIBN2cFq0.net]
>>157
www
hogeをなんだと思ってる?
そりゃそのまま打てばEmptyが帰ってくるだろう。
hogeで察してくれんかね。

カラッポなのは誰の頭だよ。

168 名前:デフォルトの名無しさん mailto:sage [2017/11/21(火) 13:03:45.67 ID:OSkNtsZi0.net]
途中経過はどうでもいいから結果を教えろ って人間がどんどん増えてんだな 経営者かよ

169 名前:デフォルトの名無しさん mailto:sage [2017/11/21(火) 16:28:44.72 ID:7aGtp6cN0.net]
結果はいいから途中経過を教えろ、なんて頭おかしいだろ何言ってんだか

170 名前:デフォルトの名無しさん mailto:sage [2017/11/21(火) 17:41:32.87 ID:rp//GM45a.net]
>>163
普通は結果教えてもらうなら過程も学ぶんだよ
まあ、別に学びの場じゃないけどね
ただ、腐ってもプログラムだからな
結果だけ知ってもその場しのぎ以上にはならんだろ

171 名前:デフォルトの名無しさん [2017/11/21(火) 18:15:13.21 ID:22dwRLVAd.net]
世の中は論理的にできているのに>>163が論理的でないのはなぜなのか

172 名前:デフォルトの名無しさん [2017/11/21(火) 19:38:11.84 ID:49Yzjg710.net]
>>165
単に逆裏待遇を理解していないだけかと

173 名前:デフォルトの名無しさん mailto:sage [2017/11/21(火) 21:45:55.72 ID:vcSymdG+d.net]
vbaを勉強中の者です。
市販で売られている本など調べても載っていないのですが、for文で使われる変数名が「i」ですが、なぜ「i」なのですか?
「i」の意味を教えて頂けませんか?

既出でしたらすみません

174 名前:デフォルトの名無しさん [2017/11/21(火) 21:52:07.73 ID:x41b941k0.net]
>>167
iterationのiって事でいいじゃん



175 名前:デフォルトの名無しさん [2017/11/21(火) 21:58:13.94 ID:49Yzjg710.net]
>>167
>168の通りだけど、もう完全に形骸化している
「i」でもいいし「ページ番号」など日本語表記でもいい
ちなみに俺は「k」から「m」「l」「n」と続ける
単に見間違いにくいように

176 名前:デフォルトの名無しさん mailto:sage [2017/11/21(火) 22:07:12.83 ID:L3nv/JJz0.net]
今グーグル先生に聞いたらFORTRANからの名残だってでてきた

177 名前:デフォルトの名無しさん mailto:sage [2017/11/21(火) 22:14:29.41 ID:wrH3tJZg0.net]
>>170
昔読んだVBだかVBAだかの書籍にはトピックとして掲載してた書籍もあったような記憶が

178 名前:デフォルトの名無しさん mailto:sage [2017/11/21(火) 22:17:05.57 ID:vcSymdG+d.net]
>>168-170
ありがとうございます!
ホント助かりました!
引っ掛かり進まなかったので、これで進みます。
納得できてよかったです
ありがとうございます

179 名前:デフォルトの名無しさん mailto:sage [2017/11/21(火) 22:17:55.51 ID:vcSymdG+d.net]
>>171さんもレスありがとう!

180 名前:デフォルトの名無しさん mailto:sage [2017/11/21(火) 22:18:54.65 ID:2WJixd7Q0.net]
integerのiだと思ってたわ

181 名前:デフォルトの名無しさん mailto:sage [2017/11/21(火) 22:47:14.99 ID:FV1Lkm8B0.net]
>>167
数学でijkは行列などの添え字で使う。
fortranでネストしたループ回すときって、微分方程式を離散化したものを解いたりするパターンが多くて、
二次元や三次元の多次元配列を使ってるだろうから、自然とijkになる。

で、数学のiはintegerからきてる、といったぐあいでは?

182 名前:デフォルトの名無しさん mailto:sage [2017/11/21(火) 23:38:11.98 ID:vcSymdG+d.net]
>>174、174
数学からなんですか?!
プログラムと数学は違うものと思っていました。ありがとう

183 名前:デフォルトの名無しさん mailto:sage [2017/11/22(水) 06:03:08.32 ID:nhDpu2iz0.net]
今から60年前にアメリカのIBM社で開発されたFORTRAN(フォートラン)というコンピューター言語があって
そこで変数名の頭文字がI以降なら整数型と定義されたのが始まり
ループカウンターは整数だからFOR文でもIを使ったという歴史がある

一方で昔のBASIC言語ではすべての変数が実数型というのが基本仕様だったので、Iを使う意味はあまりなかったけど、
FORTRANに憧れた世代が書き方を真似してそのまま定着した

という年寄りの昔話

184 名前:デフォルトの名無しさん [2017/11/22(水) 14:34:48.52 ID:NEZKz7+Jn]
質問です。

マクロ有効ブックがデスクトップにある時はマクロが動くのに
ブックが他のフォルダにあると、マクロが動きません。
原因が判る方いらっしゃいますでしょうか?

因みにコードは以下の通りです。シートコピーの所で躓きます。

Sub フォーム()
'フォームベースを日数分コピー

Dim fd As Date, ed As Date '月初月末
Dim x As Integer, i As Integer '日数とシート枚数
Dim ans '入力欄に入力された値

ans = Application.InputBox("YYYY/MM形式で入力")
fd = DateValue(ans & "/1") '年/月/1 日となる
ed = DateSerial(Year(fd), Month(fd) + 1, 0)
x = Day(ed) '月の日数

For i = 1 To (x - 1) '日数分のシートを生成

Sheets(1).Copy After:=Sheets(Sheets.Count)

Next i '繰り返し


Sheets(1).Range("F1").Value = DateSerial(Year(fd), Month(fd), 1)

End Sub



185 名前:デフォルトの名無しさん mailto:sage [2017/11/22(水) 18:32:45.15 ID:mA48vywq0.net]
>>176
数学、論理学とは非常に近しいと思う。
関数型プログラミングてスタイルもあるし、
数学の証明をある程度自動化する言語もある。CoqとかAgdaとか。

VBAにもそろそろ高階関数が欲しいですね、MSさん期待してます。

186 名前:デフォルトの名無しさん mailto:sage [2017/11/22(水) 18:50:12.14 ID:k1sKIAfY0.net]
愛があるからかと思った

187 名前:デフォルトの名無しさん [2017/11/22(水) 18:53:30.30 ID:/wgdkUUe0.net]
ループカウンタにi、j、kを使うようになったのはC言語の影響が一番大きい。

188 名前:デフォルトの名無しさん mailto:sage [2017/11/22(水) 20:12:17.87 ID:Ce6/du3cM.net]
どこまで使う?
自分はnまで。
ループ変数以外で1文字の変数は使わない。

189 名前:デフォルトの名無しさん mailto:sage [2017/11/22(水) 20:20:06.35 ID:t2AK8w6Da.net]
出来ればkまでにしたいね。
実際は思うようにいかなくて俺もnぐらいまで使ったことある。
でも1文字辞めることもある。

190 名前:デフォルトの名無しさん [2017/11/22(水) 20:57:00.17 ID:fITl6ULj0.net]
>>182
あんまり1文字変数は使わない
処理行数や処理列数などを使ってるわ
年取ると覚えるのが大変なんだよ

191 名前:答えはI〜N mailto:sage [2017/11/22(水) 21:18:19.80 ID:W0SJQGiTM.net]
>>177
> そこで変数名の頭文字がI以降なら整数型と定義されたのが始まり
嘘書くなよ...
X, Y, Z が整数型とかあり得んわ

192 名前:デフォルトの名無しさん mailto:sage [2017/11/22(水) 21:46:50.38 ID:T8s4U7Y50.net]
最近デザパタに凝っててイテレーターパターンやってるけどなかなかいいよ
まあいかに多重ループしないかは大事だわ

193 名前:デフォルトの名無しさん mailto:sage [2017/11/22(水) 21:49:25.89 ID:HR2X/8WF0.net]
イテレータと多重ループ回避って関係あったっけ?

194 名前:デフォルトの名無しさん mailto:sage [2017/11/22(水) 21:55:38.62 ID:T8s4U7Y50.net]
>>187
いやまあ、見た目上ループ変数は減るからw
よってるからよくわからんなってるわ
すまん



195 名前:デフォルトの名無しさん mailto:sage [2017/11/22(水) 22:48:54.39 ID:HR2X/8WF0.net]
VBAでイテレータパターンて難しそうだ

ループをなくす、って方向の方が良さそうです。

196 名前:デフォルトの名無しさん mailto:sage [2017/11/22(水) 22:51:49.31 ID:HR2X/8WF0.net]
方向の方w

197 名前:デフォルトの名無しさん [2017/11/22(水) 23:20:15.38 ID:pTVfJfW70.net]
Excel2010です。
文字列を引数に文字列を返すユーザ定義関数を作りました。
アドインにしてチーム内に配布しようと思ってます。
試しに新規ブックで使ってみたところ、開くたびに変更していないのに保存確認メッセージが出るようになってしまいました。
関数の中の処理を全て消しても保存確認メッセージがでます。
文字列を返すだけの関数なので、保存確認メッセージを出ないようにしたいのですが、どうすればよいでしょうか。

198 名前:デフォルトの名無しさん [2017/11/23(木) 00:02:49.97 ID:Kpe6aW6i0.net]
>>191
中身を見ないとわからない
Function Foo(bar As Long)
Foo = bar * 2
End Function
と作ってみたけど
>開くたびに変更していないのに保存確認メッセージが出るようになってしまいました。
この減少は起きなかったよ
何か別の所に原因があると思う

199 名前:デフォルトの名無しさん mailto:sage [2017/11/23(木) 06:39:11.72 ID:Y2T7cP8D0.net]
>>191
それって要するにvlookupの事?

200 名前:デフォルトの名無しさん [2017/11/23(木) 13:05:29.27 ID:IQVJTYbd0.net]
>>192
簡単に書くとこんな感じの関数です。

Function Kubun(code as string) as string
if (left(code,3) = "123") then Kubun = "A"
end function

if文が大量に続くので共通化してアドインで配布しようと思ってます。
これをKubun.xlbとしてアドインフォルダに保存しました。

新規BookでセルA1に123、セルB1に =Kubun(A1) と入力したところ
セルB1にAと表示され、関数は機能しました。
その後保存した新規Bookを開き何もせず閉じようとすると保存確認メッセージがでます。

201 名前:デフォルトの名無しさん [2017/11/23(木) 13:22:13.30 ID:fJlhhdGs0.net]
>>194
再計算されてるから
値は変化しないけどセルの内容は更新されていると予想

202 名前:デフォルトの名無しさん mailto:sage [2017/11/23(木) 13:42:02.49 ID:UTTVtMan0.net]
>>194
アトインって *.xla じゃなかったっけ?
*.xlb だとなんかいいことあるの?
(ツールバー設定とかを記憶するファイルだと思ってた)

203 名前:デフォルトの名無しさん [2017/11/23(木) 14:06:43.11 ID:1VQF43Qed.net]
>>194
xlbってなんだっけ?
xlamじゃないの?

204 名前:デフォルトの名無しさん [2017/11/23(木) 14:07:06.07 ID:1VQF43Qed.net]
かぶった



205 名前:デフォルトの名無しさん [2017/11/23(木) 14:35:16.43 ID:IQVJTYbd0.net]
すいません。拡張子は違ったかもしれません。

206 名前:デフォルトの名無しさん mailto:sage [2017/11/23(木) 15:49:16.74 ID:AvEDQSYF0.net]
>>194
ネットで検索してみると回答は>>195氏の「再計算」で正解だと思うよ
そのユーザー定義関数の中で使ってる関数の中に再計算が発生する関数が含まれているのでは?

簡単な例でいくと新規ブックのセルA1に=TODAY()と入力し確定、そのブックを保存し閉じる
そのブックを開くとTODAY関数による再計算が発生するため何もせずに閉じようとしても保存確認出る
それと同じことでは

207 名前:デフォルトの名無しさん [2017/11/23(木) 17:02:33.93 ID:IQVJTYbd0.net]
>>200
192の通り使っているのはif文とLeft関数だけです。
試しに関数の中の処理を全て消してみたのですが、
状況は変わりませんでした。

208 名前:デフォルトの名無しさん mailto:sage [2017/11/23(木) 17:02:38.88 ID:mWIv05A8x.net]
>>115
要らない

209 名前:デフォルトの名無しさん mailto:sage [2017/11/23(木) 17:22:13.82 ID:k3nQdCAx0.net]
>>201
おそらく

A1が変わってないときに、=Kubun(A1) という式が必ず同じ値を返すという「保証」ができないので
B1セルが変更されている可能性を排除できない
ということで変更されている(可能性がある)と判断されてる

ユーザ定義関数は中身チェックしないで非決定的だって判断だな
シート開くときに再計算するかどうかのオプション設定なかったっけ?最悪手動かな

210 名前:デフォルトの名無しさん [2017/11/23(木) 17:30:51.41 ID:JDomtUrWp.net]
>>201
その関数にDebug.print 文を仕込んでおいて
呼ばれたかどうかを確認してみたら?

211 名前:デフォルトの名無しさん [2017/11/23(木) 19:42:47.05 ID:IQVJTYbd0.net]
>>203
保存確認メッセージを防ぐ方法はないですかね?

>>204
関数は呼ばれていますが、それだと何か方法ありますか?

212 名前:デフォルトの名無しさん [2017/11/23(木) 20:00:32.08 ID:fJlhhdGs0.net]
>>205
関数が呼ばれると言うことは変更されると言うことだから
保存確認ダイアログが出るのが普通

savedプロパティを変更する方法とか
calculationプロパティをマニュアルにする方法とか
方法はあるかもしれないけど
他の問題が起きるようになるかもしれない

213 名前:デフォルトの名無しさん mailto:sage [2017/11/23(木) 23:21:24.29 ID:SB9DcOfL0.net]
Application.DisplayAlerts = False
のこと?

214 名前:デフォルトの名無しさん [2017/11/24(金) 11:41:27.83 ID:h1FhSyIp0.net]
質問です。Excel 2016で、Autofilerされたシートの内容を参照するために

(wsはワークシートオブジェクトです)
Debug.Print ws.AutoFilterMode     →この結果は True
Debug.Print ws.AutoFilter.FilterMode  →この結果も True
Dim rgFilter As Range
Set rgFilter = ws.AutoFilter.Range.Columns(1).SpecialCells(xlCellTypeVisible)

For Each e In rgFilter
  Debug.Print e
Next e

こんな感じで参照しようとしてるんですが、
参照してるシートでフィルターが掛かっていても、いなくても
同じように全件(25行なら25行)がイミディエイトに表示されます。
絞り込まれた結果のみを表示するためにはどうしたら良いのでしょうか?



215 名前:デフォルトの名無しさん mailto:sage [2017/11/24(金) 11:52:22.18 ID:BOT2k7iW0.net]
>>208
Set rgFilter = ws.Range("A1").CurrentRegion.SpecialCells(xlCellTypeVisible)

216 名前:デフォルトの名無しさん mailto:sage [2017/11/24(金) 12:05:42.58 ID:h1FhSyIp0.net]
>>209
素早いご回答ありがとうございます。
修正してみましたが、今度は絞込みあり/なし何れも1行だけになりました

何だか難しい操作ですねえ…

217 名前:デフォルトの名無しさん mailto:sage [2017/11/24(金) 12:12:04.66 ID:h1FhSyIp0.net]
Dim MaxRow As Long
MaxRow = ws.Range("A" & Rows.Count).End(xlUp).row

これを追加して、
Set rgFilter = ws.Range("A1:A" & MaxRow).CurrentRegion.SpecialCells(xlCellTypeVisible)

にしてみても、結果は>>208と同じになりました。
んー謎です

218 名前:デフォルトの名無しさん mailto:sage [2017/11/24(金) 13:34:47.29 ID:bxAooAvMa.net]
>>205
あるにはあるけどクソめんどくさいぞ
すべてのセルの初期値保持しといて、閉じるときに確認して値に変更なければsavedをtrueにしてから閉じる、とかね

219 名前:デフォルトの名無しさん [2017/11/24(金) 16:52:13.42 ID:x6NJ51zce.net]
Sheets("Sheet1").Columns(2).Insert Shift:=xlToLeft
Sheets("Sheet1").Columns(2).Insert Shift:=xlToRight

この二行の動作の差が分からないので
違いを教えてください

220 名前:デフォルトの名無しさん mailto:sage [2017/11/24(金) 17:34:32.78 ID:HKDmIDHRH.net]
>>213
現在のcolumns(2)の中身が左にずれるか、そのままか、かな?
当てずっぽうだけど。

221 名前:デフォルトの名無しさん [2017/11/24(金) 19:18:42.44 ID:V+PY16OM0.net]
>>206
>>212
アドインをあきらめます。
ありがとうございました。

222 名前:デフォルトの名無しさん [2017/11/25(土) 12:49:09.41 ID:roqaXNhOa.net]
エクセルVBAですがあるシートで入力し別のシートに転記するというコードを記入しているのですが
For文でやろうとするとうまくいきません。元々のシートの行が11行目から始まり転記先のシートが2行目から始まるのでネストを使って以下のようにコードを組んでみたのですが2行目の入力データが転記先のデータに2行追加されてしまいました。
1行目と2行目はそれぞれ別のデータが記述されておりそのまま転記できるようなコードにしたいです。
もしかしたら、そもそもforだとだめなのかもしれません。ちなみに入力するデータが11行目から始まり終わりは20行目で終わります。
がとりあえず繰り返し構文でできればかまいません。下記のコードをどう変えればいいか教えてください。
Sub 登録()
Set syougai = Sheets("障害記録") 'シート名にて指定しているので変更しない事
Set itigi = Sheets("一時データ") 'シート名にて指定しているので変更しない事
Const hiduke As Long = 19 '日付列の定数
Const gouki As Long = 17 '号機の列の定数
Const era As Long = 18 'エラーコードの列の定数
Const hyou1 As Long = 11 '障害集計表上の定数
Const kisyu As Long = 21
Const syuukei1 As Long = 21
For i = 2 To 3
For j = 11 To 12
itigi.Cells(i, 1).Value = syougai.Cells(j, hiduke).Value '日付
itigi.Cells(i, 2).Value = syougai.Cells(j, gouki).Value '号機
itigi.Cells(i, 3).Value = syougai.Cells(j, kisyu).Value '機種
itigi.Cells(i, 4).Value = syougai.Cells(j, era).Value 'エラーコード
itigi.Cells(i, 5).Value = syougai.Cells(j, syuukei1).Value '集計データ
i = i + 1
j = j + 1
Next j
Next i
End Sub

223 名前:デフォルトの名無しさん [2017/11/25(土) 13:36:20.17 ID:fp6T8Ewd0.net]
〉〉214
ネストの使い方間違ってると思うのですがどう直せばいいのかわかりません。

224 名前:デフォルトの名無しさん mailto:sage [2017/11/25(土) 13:39:02.15 ID:Sg1k8TV00.net]
>>216
itigi じゃなくて itiji にしろ
シート名「にて」はやめてシート名「で」にしろ
i = i + 1 と j = j + 1 は不要なので消せ



225 名前:デフォルトの名無しさん mailto:sage [2017/11/25(土) 13:55:20.06 ID:QhU2UVSF0.net]
>>216
単純にシートで開始行がずれているだけなら

For i = 2 to 3
itigi.Cells(i, 1).Value = syougai.Cells(i +9, hiduke).Value
以下略
Next

でいいんじゃないでしょうか
ループはネストすると
内側のループだけ全部回して外に抜ける、を外のループの回数
だから、ネストでは意図した動作にならないでしょう
>>218も言っているけど、Nextで変数に勝手に+1されるから足さなくていい

226 名前:デフォルトの名無しさん [2017/11/25(土) 14:08:02.51 ID:fp6T8Ewd0.net]
ありがとうございました。
できました。






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

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

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