Excel VBA質問箱 IV

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

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


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

【55685】空白、重複なしのデータを出力する min 08/5/15(木) 21:04 質問[未読]
【55686】Re:空白、重複なしのデータを出力する kanabun 08/5/15(木) 21:15 発言[未読]
【55690】Re:空白、重複なしのデータを出力する min 08/5/15(木) 21:59 発言[未読]
【55693】Re:空白、重複なしのデータを出力する kanabun 08/5/15(木) 22:53 回答[未読]
【55695】Re:空白、重複なしのデータを出力する min 08/5/15(木) 23:14 お礼[未読]

【55685】空白、重複なしのデータを出力する
質問  min  - 08/5/15(木) 21:04 -

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

下記のようなシートがあります。
A列 B列
sss 11
sss 12
sss 12
ddd 14
fff 23
(空白行)
(空白行)
577 41
577 41
(空白行)
eee 34

これを

sss 11
sss 12
ddd 14
fff 23
577 41
eee 34


という風に空白行を飛ばし、かつ重複するデータはないように
txtファイルで出力したいのですが、どのように書くのか悩んでいます。

下記のところまで書いたのですが、
どう付け足せばよいのか教えてください。
よろしくお願いいたします。

option explicit
option base1

sub totxt()

dim myfile as string
dim lastrow as long
dim i as long

myfile="・・・\file.txt"

lastrow=activesheet.cells(65536,1).end(xlup).row

open myfile for append as #1

for i =1 to lastrow
  print #1,cells(i,1),cells(i,2)
next i

close #1

end sub

【55686】Re:空白、重複なしのデータを出力する
発言  kanabun  - 08/5/15(木) 21:15 -

引用なし
パスワード
   ▼min さん:
こんばんは。

> 空白行を飛ばし、かつ重複するデータはないように
>txtファイルで出力したいのですが、

いったん、フィルタオプションの設定を使って、
元データから 重複カットしたものを
出力したらどうでしょうか

【55690】Re:空白、重複なしのデータを出力する
発言  min  - 08/5/15(木) 21:59 -

引用なし
パスワード
   ▼kanabun さん:
早速のお返事ありがとうございます。

そのまま(クッションを置かずに)出力するのは難しいですか?

>▼min さん:
> こんばんは。
>
>> 空白行を飛ばし、かつ重複するデータはないように
>>txtファイルで出力したいのですが、
>
>いったん、フィルタオプションの設定を使って、
>元データから 重複カットしたものを
>出力したらどうでしょうか

【55693】Re:空白、重複なしのデータを出力する
回答  kanabun  - 08/5/15(木) 22:53 -

引用なし
パスワード
   ▼min さん:
>そのまま(クッションを置かずに)出力するのは難しいですか?

シートの範囲をCOPY して、クリップボードに TAB区切りTEXTとして
格納されたものを DataObjectに取得して、
Dictionaryオブジェクトで重複および 空行をカットして
一括出力する方法です。

Sub Try1()
 Dim r1 As Range
 Dim v, i As Long, ss As String
 Const CLSID_DataObject = "1C3B4210-F441-11CE-B9EA-00AA006B1A69"
 
 '出力範囲をクリップボードへ転送(TAB区切り)
 With Sheets("sheet1")
   .Range("A1", .Range("A65536").End(xlUp)).Resize(, 2).Copy
 End With
 
 'クリップボードデータを文字列として取得
 With GetObject("new:" & CLSID_DataObject)
  .GetFromClipBoard
  ss = .GetText(1)
 End With
 
 '行末改行コードで 行に分割
 v = Split(ss, vbCrLf)
 '重複行と空行をカット
 With CreateObject("Scripting.Dictionary")
  For i = 0 To UBound(v)
   If Len(v(i)) > 1 Then .Item(v(i)) = Empty
  Next
  '再び CRLFで結合
  ss = Join(.Keys, vbCrLf)
 End With
 
 Dim io As Integer
 io = FreeFile() 'TAB区切りテキスト出力
 Open "D:\(Data)\file.txt" For Append As io
 Print #io, ss
 Close io
 MsgBox "出力しました"
End Sub

※カンマ区切りで出力したければ、
 クリップボードから取得した文字列中の TAB を "," に
 Replace すればいいです。

【55695】Re:空白、重複なしのデータを出力する
お礼  min  - 08/5/15(木) 23:14 -

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

こんなに遅くまで考えてくださり、ありがとうございます。
一歩前に進むことができました。

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