Top > OOobbs2 > 45
  • The added line is THIS COLOR.
  • The deleted line is THIS COLOR.
  • Go to OOobbs2/45.

** [[OOobbs2/45]] [#e8da9a3c]
-''サマリ'': 重複データの削除
-''環境'': Calc
-''状態'': 未解決
-''投稿者'': [[岡龍]]
-''投稿日'': 2007-07-05 (木) 23:50:46

*** 質問 [#i81141a7]
先日はご回答ありがとうございました。
今回もお知恵を貸してください。

下図の様に「A1」は項目名で「A2」から名前が入力してあります。

,,A
,1,名前
,2,佐藤
,3,鈴木
,4,鈴木
,5,吉岡
,6,山田
,7,佐藤

この状態からマクロを実行すると、

『重複のデータ(行)は削除される。』
という下記の結果を導き出したいです。

,,A
,1,名前
,2,佐藤
,3,鈴木
,4,吉岡
,5,山田

現在、下記の様なマクロを設定しています。

  Sub main
	Dim oDoc As Object
	Dim oSheet As Object
	Dim oSheets As Object
	Dim oColumn As Object
	Dim oEmptyRange As Object
	Dim oLastRange As Object
	Dim nNum As Long
	
 	oDoc = ThisComponent
 	oSheets = oDoc.getSheets()
  	oSheet = oSheets.getByIndex(0)
  	oColumn = oSheet.getColumns().getByName("A")
  	oEmptyRanges = oColumn.queryEmptyCells()
  	nNum = oEmptyRanges.getCount()
  	oLastRange = oEmptyRanges.getByIndex(nNum -1)
  	oCell = oLastRange.getCellByPosition(0,1)
	rwIndex = 1
	oeach = oSheet.getCellByPosition(0, rwIndex +1)
	   Do While rwIndex < oCell.CellAddress.Row
  	
  		If oSheet.getCellByPosition(0, rwIndex).String = oeach.String Then
		   oSheet.Rows.removeByIndex(rwIndex, 1)
  		Else
    		rwIndex = rwIndex +1
  		End If
	Loop
	msgbox("完了")  
  End sub

これを実行すると、

,,A
,1,名前
,2,佐藤

という必要なデータも削除されてしまいます。
「If〜Else」のループが上手く機能していないのでしょうか。

宜しくお願いします。

*** 回答 [#k5dda4ff]
- do while を二つ使ったほうがいいかもしれません。変なところで oeach が変化しています。 -- [[はにゃ?]] &new{2007-07-07 (土) 15:04:48};

#comment


*** 感想,コメント,メモ [#r10fbe65]

#comment

Reload   New Lower page making Edit Freeze Diff Upload Copy Rename   Front page List of pages Search Recent changes Backup   Help   RSS of recent changes