minecraftをさわってみた



長く遊んでいたネットゲームから足を洗った。
理由は
結局「飽きた」ということかもしれない。

流れるように洗練されたゲームにも入り込めない。
新しいルールを覚え、その世界観を取り込む余力もない。

のでちょっとカクカクした画面を眺めてみたくなった....。
楽しめるかな~。
スポンサーサイト

重複したデータの削除(vba)

おまけ
Sub Macro1()
'
'単純に重複を消す (上の価が正しい)

ActiveSheet.UsedRange.RemoveDuplicates Columns:=Array(1), Header:=xlYes



End Sub


Sub test()

'下の行に同じ値(2列目と3列目)があれば行ごと削除する(下の値で上書きする)

Dim i, j As Integer


For i = Cells(Rows.Count, 1).End(xlUp).Row To 2 Step -1
MsgBox Cells(i, 3).Value
For j = i + 1 To Cells(Rows.Count, 1).End(xlUp).Row
If Cells(i, 2).Value & Cells(i, 3).Value = Cells(j, 2).Value & Cells(j, 3).Value Then

Rows(i).Delete


End If

Next j
Next i

End Sub

重複したデータの削除

表0122
重複データがある場合に、どうするか。
データから「重複の削除」を選択
表01222
すると、チェックする項目が現れます。
表01223
OKで完了!

Sub Macro1()
ActiveSheet.UsedRange.RemoveDuplicates Columns:=Array(1, 2, 3), Header:=xlYes
End Sub

の3行でもOK!
Range("A1:C25").RemoveDuplicates Columns:=Array(1, 2, 3), Header:=xlYesと指示してもOK。
名前だけならArray(3)で。

チョットしたメモ
エラー回避
On Error Resume Next

全ての行を表示
Rows.Hidden = False
全ての列を表示
Columns.Hidden = False

ブックをアクティブ
Workbooks(1).Activate

印刷プレビューを表示
WorkSheets(1).PrintPreview

VBA高速化
Application.ScreenUpdating = False’画面更新しない
Application.EnableEvents = False'イベントを通知しない
Application.Calculation = xlCalculationManual’計算しない

そして、終わりに
Application.ScreenUpdating = True
Application.EnableEvents = True
Application.Calculation = xlCalculationAutomatic

を入れて戻します。

エクセルの表を直してみる(6)

それで、全体は for nextでくくり、
日付のある場所だけにしたかったのが、たまたま隣の列の条件で、空白でないところだったので、利用。
(いい加減だなぁ...)
A列の幅を少し広くしたかったので、Autofitを使う。
以上!



For 行 = Cells(1, 列).End(xlDown).Row To Cells(Rows.Count, 列).End(xlUp).Row

If Cells(行, 列 + 1) <> "" Then



End If

Next 行
Columns(列).AutoFit '列幅をみなおし。


End Sub

エクセルの表を直してみる(5)

ここから、力業になってて。どうなんだろーか。適当すぎる...。

とりあえず、DateAddというのがあって、-1っていうのは、1年前の年にするってこと。
2017年4月5日を2016年4月5日に修正しています。
今が12月にその年度の4月をする場合に、修正はいらないので
If Month(Date) < 4 Then '今が1,2,3月の場合に
を満たさないのでそのまま。

今が1月でその年度の4月をする場合に、2017年4月になってしまったのを2016年4月にします。
If Month(Date) < 4 Then '今が1,2,3月の場合に
  If Month(Cells(行, 列)) > 3 Then '該当のセルの月が4から12であって
If Year(Cells(行, 列)) >= Year(Date) Then '該当のセルの年が、今より大きいか等しい場合に

大きいってありえないのだけど、「等しければ(2017=2017)」前年にするってやったら
小さくても前年にやっちゃったんだよねー。
Ifは全部end ifで閉じていきます。


If Month(Date) < 4 Then '今が1,2,3月の場合に

If Month(Cells(行, 列)) > 3 Then '該当のセルの月が4から12であって

If Year(Cells(行, 列)) >= Year(Date) Then '該当のセルの年が、今より大きいか等しい場合に

Cells(行, 列).Value = DateAdd("yyyy", -1, Cells(行, 列)) '1年前の日付にする

End If


End If


End If

エクセルの表を直してみる(4)

何行か飛ばしてます。

分割 = Split(Cells(行, 列), "(")
Cells(行, 列) = 分割(0)
まず、split について

データの区切と同じ操作になります。
たとえば4月5日(火)
とあるのを『(』を基準に、分けた場合
「4月5日」と「火)」になります。
「4月5日」が分割(0)
「火)」は分割(1)です。
ここでは「火)」は不要なので 元のセルに「分割(0)」だけを残します。

これで、日付が入るのですが、
「4/5」と、月日だけ入力すると、
Excelは
「今年(入力した年)の4月5日」
と判断します。

年度末なんかに、これをやっちゃうと、1年ずれちゃいます。
2017年4月5日になるんです。

これはあとで修正~。

あと、ついでに、書き換えも説明しますね。

ctrl+Hでやっちゃうほうがはやいけど、ついでにします。
店のある列の「店」を「支店」に書き換えますねっていう関数ですね。

Cells(行, 列 + 1) = Replace(Cells(行, 列 + 1), "店", "支店")

エクセルの表を直してみる(3)

さて、とりあえずメモっておきます。
最初の表では日付が、見た目が日付でも、文字列になっている。
日付を入力したセルを選択すると、数式バーにセルの中身(データ)がわかり、見た目は日付でも日付ではないことがわかります。

こうなっていると、日付順に並び替えしたくても、うまくいかない。
4月5日(火)
5月6日(金)
6月7日(火)
7月6日(水)
8月7日(日)
9月8日(木)
10月7日(金)
11月8日(火)
12月1日(木)
12月2日(金)
12月9日(金)
1月4日(水)
1月8日(日)
2月5日(日)
3月6日(月)
となってほしいのに、並び替えたら
10月7日(金)
11月8日(火)
12月1日(木)
12月2日(金)
12月9日(金)
1月4日(水)
1月8日(日)
2月5日(日)
3月6日(月)
4月5日(火)
5月6日(金)
6月7日(火)
7月6日(水)
8月7日(日)
9月8日(木)
となってしまう。

まぁ、それもそうだし、日付を使った「なにか」をしたいときには不便。月末までの日にちが知りたいとか、そんなのもこのままでは無理。

エクセルの日付、については、シリアル値っつー、ある日付から何日ですかという、ことが決まってます。
だから、1日後、というのも「+1」という計算が可能なのです。

曜日が知りたいときは「aaa」で表示できます。
それが
Columns(列).NumberFormatLocal = "yyy/m/d(aaa)" '指定した列の日付を表示する形式を指定
です。


エクセルの表を直してみる(2)



Dim 列 As Integer
Dim 行 As Integer
Dim 分割 As Variant


列 = 1 '列指定:この場合A列指定して、日付を書き換える
Columns(列).NumberFormatLocal = "yyy/m/d(aaa)" '指定した列の日付を表示する形式を指定



For 行 = Cells(1, 列).End(xlDown).Row To Cells(Rows.Count, 列).End(xlUp).Row

If Cells(行, 列 + 1) <> "" Then


分割 = Split(Cells(行, 列), "(")
Cells(行, 列) = 分割(0)
Cells(行, 列 + 1) = Replace(Cells(行, 列 + 1), "店", "支店")



If Month(Date) < 4 Then '今が1,2,3月の場合に

If Month(Cells(行, 列)) > 3 Then '該当のセルの月が4から12であって

If Year(Cells(行, 列)) >= Year(Date) Then '該当のセルの年が、今より大きいか等しい場合に

Cells(行, 列).Value = DateAdd("yyyy", -1, Cells(行, 列)) '1年前の日付にする

End If


End If


End If
End If

Next 行
Columns(列).AutoFit '列幅をみなおし。

エクセルの表を直してみる(1)

すでに出来上がっている表が、思ったような形式でない場合にあら~と思ってしまうことってあります。
vbaで、表示形式を変更してみました。


最初の日付が、文字列です。

文字列だとなにかと不便なので、普通の日付にしてみます。

支店名に「支」が抜けてることに気が付いて、直したい。

「ctrl」+「H」でいいんですけど...ね。

ま。ついでにvbaで直してみます。



1.png


こんな感じで↓

2.png
プロフィール

Author:とも
FC2ブログへようこそ!

最新記事
最新コメント
最新トラックバック
月別アーカイブ
カテゴリ
FC2カウンター
検索フォーム
RSSリンクの表示
リンク
QRコード
QR