13/01/17 23:18:40.30
今、yahoo知恵袋を検索したら、私とまったく同じ症状の方がいて、
それを参考にしました。
新バージョンのファイルに、旧バージョンのファイルをコピーしてVLOOKを試みたところ、
できました。
参照ファイルの問題ではなく、もとにしているファイルが、旧バージョンで作成したものだから
だったようです。
ありがとうございました。
151:名無しさん@そうだ選挙にいこう
13/01/18 02:53:11.18
>>148
VBAで自動化
152:名無しさん@そうだ選挙にいこう
13/01/18 03:38:33.09
If 積雪 = True Then Call 雪かき()
153:名無しさん@そうだ選挙にいこう
13/01/18 10:35:22.57
If 童貞 = True Then Call 自殺()
154:名無しさん@そうだ選挙にいこう
13/01/18 11:09:39.87
>>152-153
If *** = True Then ~
とか
If *** = False Then ~
という書き方は冗長
True判定のIfなら
If *** Then ~
Falseなら
If Not *** Then ~
と書くべき
155:名無しさん@そうだ選挙にいこう
13/01/18 11:48:45.76
普通はね
でも稀な例として、対象がTrue、False以外の値を返す場合もある
そういう場合はIf *** = True Thenとする必要がある場合もあるので
「このケースの場合」ではなく、一概に「この書き方は冗長」というのはちょっと浅慮
例を出すと、値が"a"の場合
If *** = True Then
なら正常な否判定になるが、
If *** Then
だとエラーになる
まあ変数や戻り値の型をValiantにして、真偽値も文字列も混在して格納する(返す)というのは
設計としてどうかとも思うが、言語としてそういうことも出来る仕様であり、実際にもそういうものが
存在している以上、覚えて置いた方がいい
156:名無しさん@そうだ選挙にいこう
13/01/18 14:05:26.52
素人はそこまで考えなくていい。
エラー出てから対処すればOK
プロならそこまで考慮しなくちゃダメだがな。
157:名無しさん@そうだ選挙にいこう
13/01/18 18:52:41.23
エラーが出ればいいけどね
関数の戻り値がたとえ数値型でも
If Func1 = 123 Then
If Func1 Then
はどっちもエラーにならないから演算子や条件は省略せず明記した方が安全
158:名無しさん@そうだ選挙にいこう
13/01/18 19:08:11.47
>>157
冗長の意味わかってないんじゃね?エラーが出るからとかそういう理由で=Trueを省くほうが良いと言ってるわけじゃないけど。
TrueFalseの判断でIf ○ ThenのところにBoolean以外を使う時点でおかしいからあなたの理論での安全性は必要ありません。
それを防ぐのは=Trueを省かないという方法じゃなくて、しっかり型を宣言して正しい型を使う事の方が重要。
159:名無しさん@そうだ選挙にいこう
13/01/18 19:21:52.60
① If Func1 = 123 Then
② If Func1 Then
①は、もしFunc1が123だったらホゲホゲ
②は、どーゆー意味なの?
160:名無しさん@そうだ選挙にいこう
13/01/18 19:47:52.57
1がTRUEで他がFalseだっけ
0がFALSE 他がTRUE?
どっちかになるんじゃないかな
161:名無しさん@そうだ選挙にいこう
13/01/18 19:54:19.97
>>159
VB、VBA、MS-BASICの場合はIf の条件に数値だけ書かれると「0」と「0以外」で分岐する
「0」がFalse
「0以外」がTrue
という扱い
162:名無しさん@そうだ選挙にいこう
13/01/18 19:59:03.78
N88-BASICの時代は、メモリを節約するために
IF X+Y<>0 THEN
みたいな式を
IF X+Y THEN
と書くのが定番のテクニックだった
当時はこれが当たり前だったから、あとで別人がソースを読んでも困ることなんてなかった
163:名無しさん@そうだ選挙にいこう
13/01/18 19:59:48.59
というか
If ・・・ Then
は、
If CBool(・・・) Then
だと思えば良い
CBool関数の規則でTrueやFalseにされる値はそれに
CBool関数で真偽値に変換できない値はエラーになる
164:159
13/01/18 20:09:19.41
>>161
へぇ~、初めて知ったw
ありがとうごじゃりまする。
でもさ、俺は万年初心者だから If *** = True Then ~の方が分かりやすいな。
165:名無しさん@そうだ選挙にいこう
13/01/18 20:15:30.17
TWB = ThisWorkbook.Name
TWS = ThisWorksheet.Name
と書いたら、
2行目で「オブジェクトが必要です」ってエラーになるんだけど、
ThisWorksheet.Nameじゃだめなんですか?
166:名無しさん@そうだ選挙にいこう
13/01/18 20:36:28.22
ThisWorksheetってどこから来たんだ?
ブックに置いて、ブックは単一だからThisWorkbookというオブジェクトがあるが
ブックに置いて、シートは不特定多数存在する可能性があるから
ThisWorksheetなんてものは存在しないし仕様上ありえないんだが・・・
シートのコードモジュールでなら、Meでそのコードモジュールが属するシートのオブジェクトを掴めるから
Sheet1のコードモジュールでMe.NameならSheet1が
Sheet2のコードモジュールでMe.NameならSheet2が得られるけどね
167:名無しさん@そうだ選挙にいこう
13/01/19 10:23:22.57 BE:845011627-2BP(0)
シートは入れ子には出来ないのでしょうか?
例えば、日計表を一日づつ、またそれをひと月づつ、またそれを年度毎に入れ子にしてまとめ、
各々の時節の合計額を出すのを簡単に出来たらなと思うのですが。。。(子シートの同セル合計を親シートで出せたり)
168:名無しさん@そうだ選挙にいこう
13/01/19 10:37:05.40
視覚上でシートタブを入れ子にするってことは基本的に出来ないし
むりやりやるにはVBAが必要だけど
計算上で親子関係を作るのは可能だよ
親、子1、子2、子3、1孫1、1孫2、1孫3、2孫1、2孫2、2孫3、3孫1、3孫2、3孫3
とシートを作れば、「子1」シートに
=SUM(1孫1:1孫3!A1)
で、「子1」の子である「1孫*」達のA1の合計が出せるし
「親」シートに
=SUM(子1:子3!A1)
で、子1~3のA1の合計を「親」シートに出せる
169:名無しさん@そうだ選挙にいこう
13/01/19 10:43:40.51
そういうのは全データを1枚のシートに並べて、ピボットテーブルで集計した方が簡単だよ…
170:名無しさん@そうだ選挙にいこう
13/01/19 11:01:19.12
場合によってはそれな入力性が激しく悪くなる可能性があるからなぁ
ユーザーフォームで入力補助フォーム作れるレベルならいいんだが
ここで質問してる奴がそのレベルに達してるとは思えないし