Excel VBA質問箱 IV

当質問箱は、有志のボランティア精神のおかげで成り立っています。
問題が解決したら、必ずお礼をしましょうね。
本サイトの基本方針をまとめました。こちら をご一読ください。

投稿種別の選択が必要です。ご注意ください。
迷惑投稿防止のため、URLの入力を制限しています。ご了承ください。


9825 / 13644 ツリー ←次へ | 前へ→

【25184】コード変換 KOTARO 05/5/23(月) 23:55 質問[未読]
【25201】Re:コード変換 G-Luck 05/5/24(火) 10:28 発言[未読]
【25208】Re:コード変換 KOTARO 05/5/24(火) 13:15 発言[未読]
【25210】Re:コード変換 G-Luck 05/5/24(火) 13:19 発言[未読]
【25213】Re:コード変換 KOTARO 05/5/24(火) 14:33 発言[未読]
【25214】Re:コード変換 G-Luck 05/5/24(火) 14:48 発言[未読]
【25217】Re:コード変換 KOTARO 05/5/24(火) 15:12 発言[未読]
【25218】Re:コード変換 G-Luck 05/5/24(火) 15:25 発言[未読]
【25219】Re:コード変換 G-Luck 05/5/24(火) 15:43 発言[未読]
【25220】Re:コード変換 KOTARO 05/5/24(火) 16:01 発言[未読]
【25221】Re:コード変換 G-Luck 05/5/24(火) 16:28 発言[未読]
【25222】Re:コード変換 KOTARO 05/5/24(火) 17:05 発言[未読]
【25223】Re:コード変換 G-Luck 05/5/24(火) 17:31 発言[未読]
【25226】Re:コード変換 KOTARO 05/5/24(火) 19:32 発言[未読]
【25227】Re:コード変換 G-Luck 05/5/24(火) 19:35 発言[未読]
【25241】Re:コード変換 KOTARO 05/5/25(水) 8:25 お礼[未読]
【25242】Re:コード変換 G-Luck 05/5/25(水) 8:49 発言[未読]
【25245】Re:コード変換 KOTARO 05/5/25(水) 9:44 質問[未読]
【25249】Re:コード変換 G-Luck 05/5/25(水) 11:08 発言[未読]
【25260】Re:コード変換 KOTARO 05/5/25(水) 19:56 お礼[未読]

【25184】コード変換
質問  KOTARO  - 05/5/23(月) 23:55 -

引用なし
パスワード
   コード表をもとに変換していく作業です。
アドバイスお願いいたします。
※列方向へ順次コピー/ペーストを繰り返し、対象セルが空白になったところで終了したいのです。

Sub Macroコード変換()
'コード表のブックを開く
  Workbooks.Open FileName:="H:\コード変換表.xls"
  Windows("Book1").Activate
'対象セルの隣に変換式を入力  
  ActiveCell.FormulaR1C1 = "=VLOOKUP(RC[-1],コード変換表.xls!コード表,2,FALSE)"
'変換された値を同一セルにコピー/ペースト
Selection.Copy
  Range("E4").Select
  Selection.PasteSpecial Paste:=xlValues, Operation:=xlNone, SkipBlanks:= _
    False, Transpose:=False
'コード表のブックを閉じる
Windows("コード変換表.xls").Activate
  ActiveWindow.Close
  Application.CutCopyMode = False
End Sub

【25201】Re:コード変換
発言  G-Luck  - 05/5/24(火) 10:28 -

引用なし
パスワード
   ▼KOTARO さん:
>コード表をもとに変換していく作業です。
>アドバイスお願いいたします。
>※列方向へ順次コピー/ペーストを繰り返し、対象セルが空白になったところで終了したいのです。

こんな感じでしょうか?
対象セルは、D4以下とした場合

Sub Macroコード変換()
  Dim rg As Range

  'コード表のブックを開く
  Workbooks.Open FileName:="H:\コード変換表.xls"

  Set rg = Workbook("Book1").ActiveSheet.Range("D4")
  Do While rg =<> ""
    '対象セルの隣に変換式を入力  
    rg.Offset(0,1).FormulaR1C1 = _
      "=VLOOKUP(RC[-1],コード変換表.xls!コード表,2,FALSE)"
    '変換された値を同一セルにコピー/ペースト
    rg.Offset(0,1).Value = rg.Offset(0,1).Text
    'コード表のブックを閉じる
    Windows("コード変換表.xls").Close
    Set rg = rg.Offset(1,0)
  Loop
End Sub

コピーは、Textを利用してみました。Textは表示値です。
Windowを閉じるは、一つのブックに対して複数のWindowを開いている場合に使うとよいですよ。

【25208】Re:コード変換
発言  KOTARO  - 05/5/24(火) 13:15 -

引用なし
パスワード
   G-Luck さん
お世話になります。
さっそく試しましたところ、

>  Set rg = Workbook("Book1").ActiveSheet.Range("D4")
※この部分でエラー表示「SubまたはFunctionが定義されていません」
>  Do While rg =<> ""
※赤で表示

という状況です。
どうなおせばよいでしょうか

【25210】Re:コード変換
発言  G-Luck  - 05/5/24(火) 13:19 -

引用なし
パスワード
   ▼KOTARO さん:
失礼しました
  Set rg = Workbooks("Book1").ActiveSheet.Range("D4")
   'Workbooksのsをつける
  Do While rg <> ""
   '=を削除する
と直してください。

【25213】Re:コード変換
発言  KOTARO  - 05/5/24(火) 14:33 -

引用なし
パスワード
   G-Luck さん
ありがとうございます。
修正して実行してみましたが、作業用のブックに移る前に

Set rg = Workbooks("作業用").ActiveSheet.Range("W2")
「インデックスが有効範囲にありません」のエラーです

アクテイブセルは作業用.xlsのW2にあります(変換したい対象セルはV列)
「コード変換表」の指定の方法に問題がありますか

【25214】Re:コード変換
発言  G-Luck  - 05/5/24(火) 14:48 -

引用なし
パスワード
   ▼KOTARO さん:

>Set rg = Workbooks("作業用").ActiveSheet.Range("W2")
ブック名は、「作業用」ですか?
「作業用.xls」では、
シート名もわかっているのであれば、ActiveSheetでは無く、Worksheets("シート名")とした方がいいですよ。

【25217】Re:コード変換
発言  KOTARO  - 05/5/24(火) 15:12 -

引用なし
パスワード
   G-Luck さん
ご面倒をおかけします。
Set rg = Workbooks("作業用").Worksheets("Sheet1").Range("V2")
としましたが、やはり同じエラーがでてしまいます。

【25218】Re:コード変換
発言  G-Luck  - 05/5/24(火) 15:25 -

引用なし
パスワード
   ▼KOTARO さん:

>Set rg = Workbooks("作業用").Worksheets("Sheet1").Range("V2")

通常、ブック名には拡張子をつけなければいけません。
新規作成で、保存前ですと、「Book1」と拡張子をつけずに指定する必要がありますが。
VBEのプロジェクト名の部分を確認してみてください。「.xls」と付いていると思うのですが。

【25219】Re:コード変換
発言  G-Luck  - 05/5/24(火) 15:43 -

引用なし
パスワード
   ▼G-Luck さん:
訂正

フォルダオプションの「登録されている拡張子は表示しない」のチェックをはずしている場合
>通常、ブック名には拡張子をつけなければいけません。
>新規作成で、保存前ですと、「Book1」と拡張子をつけずに指定する必要がありますが。
>VBEのプロジェクト名の部分を確認してみてください。「.xls」と付いていると思うのですが。

フォルダオプションの「登録されている拡張子は表示しない」のチェックをしている場合は、拡張子なしで指定してもよいようです。但し、同名、異拡張子のファイルを開いている場合、最初に開いた方を選択します。

【25220】Re:コード変換
発言  KOTARO  - 05/5/24(火) 16:01 -

引用なし
パスワード
   G-Luck さん
ご面倒をおかけします。

>通常、ブック名には拡張子をつけなければいけません。
>新規作成で、保存前ですと、「Book1」と拡張子をつけずに指定する必要がありますが。
>VBEのプロジェクト名の部分を確認してみてください。「.xls」と付いていると思うのですが。

Set rg = Workbooks("作業用.xls").Worksheets("Sheet1").Range("V2")
としましたが、やはり同じエラーです。
念のためコード変換表.xlsと作業用.xlsを同じフォルダに入れやってみましたが…

【25221】Re:コード変換
発言  G-Luck  - 05/5/24(火) 16:28 -

引用なし
パスワード
   仕切りなおして、

Sub Test
  Debug.Print Workbooks("作業用.xls").Name
End sud
'上記コードを実行してエラーが出ますか?


作業用.xlsは開いていますか?
.xlsはちゃんと半角ですか?

コードはどこに書きましたか?
作業用.xls内であれば
Thisworkbook.Worksheets(〜〜
という方法もあります。

【25222】Re:コード変換
発言  KOTARO  - 05/5/24(火) 17:05 -

引用なし
パスワード
   G-Luck さん
ご迷惑をおかけします。

>仕切りなおして、
>
>Sub Test
>  Debug.Print Workbooks("作業用.xls").Name
>End sud
>'上記コードを実行してエラーが出ますか?
エラーは出ませんでした。

>作業用.xlsは開いていますか?
>.xlsはちゃんと半角ですか?
作業用.xlsは開いています。拡張子は半角にしています。

>コードはどこに書きましたか?
>作業用.xls内であれば
>Thisworkbook.Worksheets(〜〜
>という方法もあります。
コードはPERSONAL.xls内です

【25223】Re:コード変換
発言  G-Luck  - 05/5/24(火) 17:31 -

引用なし
パスワード
   ▼KOTARO さん:
Sub Test
  Debug.Print Workbooks("作業用.xls").Worksheets("Sheet1").Name
End sud

では?

対象シートは、Sheet1ですか?存在しますか?

【25226】Re:コード変換
発言  KOTARO  - 05/5/24(火) 19:32 -

引用なし
パスワード
   G-Luck さん
お世話になります

>Sub Test
>  Debug.Print Workbooks("作業用.xls").Worksheets("Sheet1").Name
>End sud
>
>では?
>
>対象シートは、Sheet1ですか?存在しますか?
これも特にエラーにはなりませんでした。

【25227】Re:コード変換
発言  G-Luck  - 05/5/24(火) 19:35 -

引用なし
パスワード
   ▼KOTARO さん:

>これも特にエラーにはなりませんでした。
あれ?じゃあ何ででしょう?

次はもう想像できると思いますが、

Sub Test
  Debug.Print Workbooks("作業用.xls").Worksheets("Sheet1"). _
    Range("V2").Address
End sud

では?

【25241】Re:コード変換
お礼  KOTARO  - 05/5/25(水) 8:25 -

引用なし
パスワード
   G-Luck さん:
原因がわかりました。
シート名に半角スペースが入っていたためでした。
修正したところ無事動作しました。
お手数をおかけし、申し訳ありませんでした。

あともう1点だけ教えていただきたいのですが、
実際の作業においてはブック名やシート名が「作業用0525.xls」「Sheet0525」というように毎日変わってきます。
コードを書き換えることなく対応するためにはどう表記すればよいでしょうか。
「作業用*.xls」「Sheet*」ではエラーでした。

【25242】Re:コード変換
発言  G-Luck  - 05/5/25(水) 8:49 -

引用なし
パスワード
   ▼KOTARO さん:

>原因がわかりました。
>シート名に半角スペースが入っていたためでした。
>修正したところ無事動作しました。
>お手数をおかけし、申し訳ありませんでした。

原因究明できて良かったです。

>あともう1点だけ教えていただきたいのですが、
>実際の作業においてはブック名やシート名が「作業用0525.xls」「Sheet0525」というように毎日変わってきます。
>コードを書き換えることなく対応するためにはどう表記すればよいでしょうか。
>「作業用*.xls」「Sheet*」ではエラーでした。

日付を入力したセルを一つ作ってはどうですか?
=Today()
表示形式をユーザー形式で mmdd

VBA上では
Range("A1").Textで取得
作業用 & Range("A1").Text & .xls とか。

もちろん、VBA上で日付を変換することも出来ますが、

【25245】Re:コード変換
質問  KOTARO  - 05/5/25(水) 9:44 -

引用なし
パスワード
   G-Luck さん

日付は一例で日付でない場合もありますので、「作業用*.xls」「Sheet*」のような汎用の表記はできないでしょうか

【25249】Re:コード変換
発言  G-Luck  - 05/5/25(水) 11:08 -

引用なし
パスワード
   ▼KOTARO さん:

ようは、A1セルに*に相当する部分を入力すればいいのでは?

【25260】Re:コード変換
お礼  KOTARO  - 05/5/25(水) 19:56 -

引用なし
パスワード
   G-Luck さん:

いろいろとアドバイスいただき
誠にありがとうございました。

9825 / 13644 ツリー ←次へ | 前へ→
ページ:  ┃  記事番号:
2610219
(SS)C-BOARD v3.8 is Free