Excel VBA質問箱 IV

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

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


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

【6837】日付をファイル間で・・・ スヌーピ- 03/8/6(水) 16:42 質問
【6839】Re:日付をファイル間で・・・ Jaka 03/8/6(水) 17:17 回答
【6841】Re:日付をファイル間で・・・ スヌーピ- 03/8/6(水) 17:35 質問
【6848】Re:日付をファイル間で・・・ Jaka 03/8/7(木) 15:50 回答
【6850】Re:日付をファイル間で・・・ スヌーピ- 03/8/7(木) 17:03 お礼
【6846】Re:日付をファイル間で・・・ Fuku 03/8/7(木) 10:46 回答

【6837】日付をファイル間で・・・
質問  スヌーピ- E-MAIL  - 03/8/6(水) 16:42 -

引用なし
パスワード
   EXCELVBA初心者です。

CSVファイルからエクセルシートに日付データをコピーする時に
データがスラッシュで切れてしまいます。
例       
CSV 1978/12/15
エクセル 1978

Input #1, myArray
でArrayにデータを格納しているのですが…

よろしくお願いします。

 

【6839】Re:日付をファイル間で・・・
回答  Jaka  - 03/8/6(水) 17:17 -

引用なし
パスワード
   こんにちは。

[#1910]ためしてね。
TBL() As String → TBL() As Variant に変えたほうが良いかも。

【6841】Re:日付をファイル間で・・・
質問  スヌーピ- E-MAIL  - 03/8/6(水) 17:35 -

引用なし
パスワード
   Jakaさん
すばやい返答有難うございますm(__)m

宣言文を Dim myArray() As Variant
にしたら Input #1, myArrayのところで「オーバーフローしています」
というエラーになってしまいました。

あと宣言文をDim myArray As Variantにしたらスラッシュで途切れてしまいました・・・
よろしくお願いしますm(__)m

【6846】Re:日付をファイル間で・・・
回答  Fuku  - 03/8/7(木) 10:46 -

引用なし
パスワード
   こんにちは。

Input #ステートメントから取得した変数(myArray)の中身を確認してください。
この時点で既に"1978"で切れているのでしょうか?

もし切れていないのであれば、コピー先のシートのセルの書式設定を確認してみてください。
(ユーザ定義="yyyy"とかになっているとか?)

的外れであればすみません...

【6848】Re:日付をファイル間で・・・
回答  Jaka  - 03/8/7(木) 15:50 -

引用なし
パスワード
   ▼スヌーピ- さん:
>宣言文を Dim myArray() As Variant
>にしたら Input #1, myArrayのところで「オーバーフローしています」
>というエラーになってしまいました。
>
>あと宣言文をDim myArray As Variantにしたらスラッシュで途切れてしまいました・・・
>よろしくお願いしますm(__)m

あの〜、そう言う事ではなく、実行して見てくださいって言う事だったんですけど...。

提示されたコードの1部分だけの情報だけでは、判断するのが難しいです。
変数の宣言も全然わからないし...。
CSVファイルのデータがどうなっているのかも良くわかりませんし。
もっと鮮明なコードとCSVファイルのデータを4〜5行ほど提示してみてください。

ほとんどわかって伊ませんから、全くの感です。
こんな風にしたいってことだったんでしょうか?
因みに現在、私が使っている97では動きません。

Dim myArray() As Variant

Line Input #1, RdLine
myArray = Split(RdLine, ",")
Cells(1, 1).Resize(, UBound(myArray) + 1).Value = myArray

【6850】Re:日付をファイル間で・・・
お礼  スヌーピ- E-MAIL  - 03/8/7(木) 17:03 -

引用なし
パスワード
   いろいろアドバイス有難うございました。まだまだ勉強不足なのでいろいろ迷惑かけてしまいすみませんでした。

Input #1, myArrayの所を Line Input #1, myArray
になおし、カンマでデータを区切るsplit関数を用いる事により
実行できました。そのソースを載せておきます。

CSVファイルのデータ
1,太郎,1960/7/27,1979/4/1,GPM2級,無所属,部長
2,次郎,1965/2/21,1980/4/1,PM3級,無所属,部長

Option Explicit

'  TextFileを絶対Pathで指定
Private Const INFILE = "C:/java/CSV/0371.csv"
Private Sub CommandButton1_Click()

Dim i As Long, j As Integer
Dim myRange As String
Dim myRange1 As String
Dim myRange2 As String
Dim myArray As Variant
Dim myArray2 As Variant
Dim myFileName As String
Dim mywb As Workbook
Dim mySht As Worksheet

Open INFILE For Input As #1

  On Error GoTo Macro1_Err

  On Error GoTo 0
  With ActiveSheet
    .UsedRange.Select
    Selection.ClearContents
    .Range("A1").Select
    End With
  '新しいブックを作成
  Workbooks.Add
  'ファイル名の指定
  myFileName = "0371.xls"
  Set mywb = Workbooks(2)
  mywb.SaveAs Filename:=myFileName
  Set mywb = Nothing

  On Error Resume Next
  'ワークシートの指定
  Worksheets(1).Name = "新規"
  On Error GoTo 0
  Set mySht = Nothing

  i = 0
  
  Do Until EOF(1)
    i = i + 1
  '配列に読み込む
  Line Input #1, myArray
  'カンマ区切りで配列に書き込む
  myArray2 = Split(myArray, ",", -1)
    
  'アクティブブックとアクティブシートの指定  
  Workbooks("0371.xls").Activate
  Worksheets("新規").Activate
    
    '指定したセルにデータを書き込む
    For j = 1 To 7
    Select Case j
    Case 1
      myRange2 = ActiveSheet.Cells(1, 1).Address
    Case 2
      myRange1 = ActiveSheet.Cells(3, 1).Address
      ActiveSheet.Range(myRange1).Value = "氏名"
      myRange2 = ActiveSheet.Cells(3, 3).Address
      ActiveSheet.Range(myRange2).Value = myArray2(1)
    Case 3
      myRange1 = ActiveSheet.Cells(5, 1).Address
      ActiveSheet.Range(myRange1).Value = "生年月日"
      myRange2 = ActiveSheet.Cells(5, 3).Address
      ActiveSheet.Range(myRange2).Value = myArray2(2)
    Case 4
      myRange1 = ActiveSheet.Cells(7, 1).Address
      ActiveSheet.Range(myRange1).Value = "入社年月日"
      myRange2 = ActiveSheet.Cells(7, 3).Address
      ActiveSheet.Range(myRange2).Value = myArray2(3)
    Case 5
      myRange1 = ActiveSheet.Cells(9, 1).Address
      ActiveSheet.Range(myRange1).Value = "職能"
      myRange2 = ActiveSheet.Cells(9, 3).Address
      ActiveSheet.Range(myRange2).Value = myArray2(4)
    Case 6
      myRange1 = ActiveSheet.Cells(11, 1).Address
      ActiveSheet.Range(myRange1).Value = "所属"
      myRange2 = ActiveSheet.Cells(11, 3).Address
      ActiveSheet.Range(myRange2).Value = myArray2(5)
    Case Else
      myRange1 = ActiveSheet.Cells(13, 1).Address
      ActiveSheet.Range(myRange1).Value = "位"
      myRange2 = ActiveSheet.Cells(13, 3).Address
      ActiveSheet.Range(myRange2).Value = myArray2(6)
    End Select
    Next
    
  Loop
  Exit Sub
Macro1_Err:
  MsgBox "INFILE Error!"
  Exit Sub


End Sub
>>jakaさんへ
いろいろ迷惑かけてすみませんでした。少ない情報でいろいろアドバイスして頂き有難うございました。今度質問する時は気をつけたいと思います。

>>Fukuさんへ
そのとうりでした。配列に入れた時点で1978だけになっていました。

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