■
羊でもわかるかもしれないウイルスの話
羊「神様〜、ちょっとサワリだけでも」
神様「お客様、お触りは別料金でございます」
羊「いやそうじゃなくて」
神様「冗談冗談、忙しくてね。車がパンクしてスペアタイヤと交換する為にジャッキと格闘してたとこだよ(実話)」
羊「神様、そんなことは自動車屋さんに」
神様「『ドライブにディスクがありません』という例のメッセージの件でしょ。私なんかドライブするにもタイヤがありませんってね」
羊「そのくだりはもういいですから」
神様「原因はたくさん考えられるよ。みんなが言うようにウイルスかもしれないし、OSがおかしくなってるのかもしれない、別のアプリケーションのせいかもしれない」
羊「昨日までは普通に使えたのに今日になって突然出たんです」
神様「たいていの人はそう言うものです。それで実際に何もしなくってもパソコンは壊れるときは壊れる。パソコンとはそういうものだと思ったほうがいい。では一つ一つ考えいこう」
羊「山田なんとかってのもウイルスなんですか?」
神様「一言でウイルスと言ってもたくさんの種類があってね。こちらを見たほうが早いかな。
http://mh.rgr.jp/memo/mn0011.htm
ここには書いていないが情報を収集するスパイウェアも広い意味ではウイルスに分類される。山田オルタナティブはトロイの木馬に分類されていて、感染すると勝手にデスクトップのファイルをネットに流してしまう凶悪な物なんだ。初期に山田さんという人から送られたファイルが感染したファイルだったということでその名前がついた。おじゃまんが山田くんから来てるわけではないぞ」
羊「じゃりン子チエウイルスは無いんでしょうか?」
神様「(無視)。山田なんとかウイルスに感染してるかどうかは、1の回答にあるように
http://sharp-usersnet.jp/pcstudio/disp.asp?cno=6&tbno=0&dno=108&dmode=N
この上の4つのリンクをクリックして下の画面が出なければ感染していないとすぐにわかる。ただし別のウイルスや亜種に感染してるとも限らないから念の為に調べることは別に悪いことじゃない。ただそれも過信は禁物でウイルスバスターや他のアンチウィルスでも検知率は九十数%で絶対ではないのです。因みに神様もavastをすり抜けたエッチなファイルでデスクトップに花火が上がったことがあるよ」
羊「神様、それは自業自得ということではないでしょうか?」
神様「1の2つ目のリンクはMicrosoftで出しているウイルスの駆除ツールで既にウイルスバスターで調べたのならやらなくてもいいかなとは思うけど」
羊「インストールしようとしたら『発行元を確認出来ませんでした』って言われましたよ。大会社のMicrosoftなのに怪しいです」
神様「デジタル署名って言うんだけど、第3者機関に問い合せて本物のファイルかどうかを確認する仕組みなんだ。その説明ではデジタル署名は登録してることになってるので変ですね。
Q1: Is this tool digitally signed by Microsoft?
A1: Yes.
羊「ひょっとして偽物!あらもう無視してインストールしようとしてました。『有効なWin32 アプリケーションではありません』が出ちゃった」
神様「このメッセージが出る場合はファイルが壊れている場合もあるから、ダウンロードが失敗してたのかもね。それでデジタル署名も通らなかったのかも。因みに神様はWindows7 64bitなのでこちらから
http://support.microsoft.com/?kbid=890830#top
64bit版をダウンロードして試したら普通に使えましたよ」
羊「ウイルスについては少しわかったけど、ウイルスじゃないとしたら原因は何でしょうか?」
神様「実を言うとね神様のパソコンでも同じような表示を何度も見たことがあるんだよ。別に神様のパソコンはウイルスに感染はしていないのだけど。一番多いのはフロッピーディスクの読み取りエラー。他にUSBの外付けディスクが関係してたこともある。ただしそういうのは普通一回出て終わりだから毎回起動のたびに出るとなると心配かもしれません。」
羊「起動するときに勝手に動くプログラムが犯人じゃないの?」
神様「少し鋭くなったな。Windowsは起動するときにたくさんのプログラム(スタートアップ項目、サービスやプロセス)を動かすんだよ。それで何が原因となっているかを特定するのはとても難しいんだ。とりあえず表示されなくなったようだから様子を見るのがいいかと思うよ」
羊「それでもダメだったら?」
神様「手段の一つとして、システムの復元というのがあるよ。これはWindowsの設定を定期的に作られる復元ポイントに戻すことで、正常だったころのWindowsに戻すという方法」
羊「それでもそれでもダメだったら?」
神様「Windowsを再インストール。これで治らなければ機械が壊れていることになるね」
羊「再インストールのときはよろしくお願いします。orz」
神様「・・・急に腹痛と下痢が、何か悪いウイルスに・・・」
羊「神様、ノロウイルスとかうまいこと言って逃げようとしてません?」
神様「(口から泡を出して気絶)」
羊「もう、演技が上手いんだから」
■
私の場合は評価の為にスターを付けるということの他に、攻撃的なユーザーをスターフレンドに入れない為に特定の人には冗談でも絶対にスターを付けないようにしていたりします。その為に私のスターによるミニコメントは仕様どうりなら比較的見せなくていい人には見ることができない場所となります。
3ヶ月以内のスターリスト(同じ人は最新の物)
2011/4/22 kia_44 daichan330 2011/4/21 sdkfz 2011/4/20 Yoshiya MEI-ZA-YU 2011/4/16 karuishi 2011/4/15 Beirii ken3memo 2011/4/14 fut573 2011/4/13 taddy_frog 2011/4/9 rouge_2008 2011/4/2 akagi_paon NAPORIN 2011/3/27 kk_solanet 2011/3/25 goldwell 2011/3/23 alpinix 2011/3/22 nanntenn 2011/3/20 irodoria yep feel-so-good abc1cba yukee-ane ID_u1nje3rh o_ne_i 2011/3/18 loio taisin0212 2011/3/16 rsc96074 2011/3/11 Shelled 2011/3/9 takejin 2011/3/4 doumoto 2011/3/2 garyo 2011/2/25 KEI-CHAN 2011/2/17 sayonarasankaku gguide-ru WING0 mai_68 2011/2/16 flandlescarlet a-55 kaito0620 mzkmzk Gleam straika-4 kento1997 OhYeah hoshi-kawamu o_p surira-soramimi 2011/2/9 searchikin 2011/2/7 Newswirl 2011/2/5 Nikola 2011/1/31 tanuki82 shaberemasenn 2011/1/27 fmht7
■
http://q.hatena.ne.jp/1301453031
既に解決しているようなので作らないかなと思っていましたが、
なんか無理とか言ってる人がいたのでさくさくっと作っておきます。
A列が同じ数で並んでいるとは限らないのでそれにも対応しておきました。
数万行とかなら数式はナンセンスなんで、VBAの価値もあるか。
Sub Macro() Application.ScreenUpdating = False Dim i As Long Dim j As Long Dim k As Long Dim f As Boolean Dim h() As String Dim lastRow As Long Dim r As Range lastRow = Cells(Rows.count, "A").End(xlUp).Row For i = 1 To lastRow For j = lastRow To i Step -1 If Cells(i, "A").Value = Cells(j, "A").Value Then Cells(j, "F").Value = Cells(j, "F").Value + Cells(i, "G").Value Exit For End If Next j Next i For i = 1 To lastRow If Cells(i, "F").Value <> "" Then ReDim h(0) For j = 1 To i If Cells(i, "A").Value = Cells(j, "A").Value Then f = False For k = 0 To UBound(h) If h(k) = Cells(j, "C").Value Then f = True Exit For End If Next k If Not f Then ReDim Preserve h(UBound(h) + 1) h(UBound(h)) = Cells(j, "C").Value End If End If Next j Cells(i, "D").Value = UBound(h) End If Next i Application.ScreenUpdating = True End Sub
削除して小計行だけを残すマクロです。
Sub Macro2() Application.ScreenUpdating = False Dim i As Long Dim j As Long Dim lastRow As Long lastRow = Cells(Rows.Count, "A").End(xlUp).Row Range("G:G").Copy Range("F:F") For i = 1 To lastRow For j = i + 1 To lastRow If Cells(i, "A").Value = Cells(j, "A").Value And _ Cells(i, "C").Value = Cells(j, "C").Value Then Cells(j, "F").Value = Cells(j, "F").Value + Cells(i, "F").Value Rows(i).Delete i = i - 1 lastRow = lastRow - 1 Exit For End If Next j Next i lastRow = Cells(Rows.Count, "A").End(xlUp).Row Range(Cells(1, "D"), Cells(lastRow, "D")).Value = 1 For i = 1 To lastRow For j = i + 1 To lastRow If Cells(i, "A").Value = Cells(j, "A").Value Then Cells(j, "F").Value = Cells(j, "F").Value + Cells(i, "F").Value Cells(j, "D").Value = Cells(j, "D").Value + Cells(i, "D").Value Rows(i).Delete i = i - 1 lastRow = lastRow - 1 Exit For End If Next j Next i Application.ScreenUpdating = True End Sub
■
http://q.hatena.ne.jp/1301182037
私の場合はマクロで書いたほうが楽なのでマクロの回答としましたが、
質問の条件ならば次の手順でワークシートでやるのがいいかもしれません。
1 A列をD列にコピー。
2 「2」で全て検索。Ctrl+Aを押して「2」のセルのを全て選択。
3 選択された女のセルの文字を赤にする。
4 B列全体選択し、形式を選択して貼りつけから書式を選びD列にコピー。
5 B列全体を黒に戻す。
偽善について
偽善について考えるときには必ず思い出すことがあります。
それは大学生の頃。当時の私は慈善活動やボランティアとは無縁で、むしろそういう人を軽蔑するような学生でした。それでもカトリックの寮に住んでいたので募金活動とかに熱心なおばさんとかが出入りしていて知り合う機会もあったのですが、彼女らの募金するのが当たり前という考えをすごく不快に思っていました。(キリスト教徒でも無い私がカトリックの寮に住んでいたのはただ単に家賃がただだったからです。)
ある年の大晦日前、実家に帰省するときに長距離の夜行列車に乗ることがあって、たまたま隣に乗り合わせた初老の人が目の見えない人だったことがありました。それに気づいたのはその老人がしばらくして私に、「トイレに行きたいんだけど、目が見えないから連れて行ってくれないか」というようなことを言ったからです。正直面倒臭いなと思いましたが、私はその老人の手を取り揺れる列車に気をつけながらゆっくりトイレまで案内し、親切にもそこで老人が出てくるのを待ってまた手を引いて座席まで連れていきました。
その老人は私にお礼を言っていましたが、私は別に話をする気も無いのでほとんど無視していました。覚えているのは確か函館の息子のところに行くというようなことを言っていたことで、こんな年の瀬に目の見えない爺さんに一人で来させるなんて可哀想だなって思ったことくらいです。
列車は函館について私も乗り換えの為に一度降りるのですが、私は老人の手を取り列車から降りるところまで手伝いました。予め連絡をしてあったのかそこには駅員が出迎えていて私は老人を引き渡し逃げるようにその場を離れました。それでもちょっと気になったので振り返ってみると、なんと老人は私がいない方向に頭を下げてお礼を言ってるんです。私は何かを振り払うように急ぎ足で改札を出ました。
たぶん同じ状況なら誰でも同じことをするでしょう。目の見えない老人に親切にするだけです。でも私はできるだけそんなことはしたく無いと思って生きてきました。他の人に偽善者だと思われたく無かったし、そんなのは本当の親切じゃない。単に人に親切にしている自分に酔いたいだけだ。
でも実際は老人に感謝されて素直にうれしいと思う自分がそこにいたんです。それを認めたくなくてその場を逃げようとしていました。自己満足でうれしいと思っている自分は確かにあって、私はそれと向きあいたくない為に逃げて、慈善活動を馬鹿にし募金者を軽蔑していたのです。自分の中には自分が軽蔑してきた自己満足の自分、偽善者が最初からいたんです。
そのことに気づいてからは、少し楽になれた気がしました。
私は今でも偽善ではない純粋な善があるのかどうかもわかりません。
でも人に偽善者と言われたら、たぶん「はい、偽善者です」と胸を張って答えると思います。
■
http://q.hatena.ne.jp/1299162578
ソートの質問で意外と難題で他にいい方法もありそうだけど、
とりあえずある程度の物はできたので置いておきます。
ただし、半角カタカナとかがまだ不完全な感じがします。
Sub mySort() Application.ScreenUpdating = False Const key As Integer = 1 Dim rng As Range Dim i As Long Dim j As Long Dim moji As Integer Dim str As String Dim sc As Long Dim sr As Long Dim f As Boolean Dim f1 As Boolean sc = Selection.Column sr = Selection.Row If Selection.Columns.count < key Then MsgBox "キー列が不正です" Exit Sub End If If Selection.Rows.count < 2 Then Exit Sub Call SubSort(Selection, key, 1) moji = 2 Do f = False f1 = False Set rng = Range(Cells(sr, sc), Cells(sr, sc + Selection.Columns.count - 1)) str = StrConv(Left(Cells(sr, sc + key - 1).Value, moji - 1), vbWide) For i = sr + 1 To sr + Selection.Rows.count - 1 If Len(Cells(i, sc + key - 1)) >= moji Then f1 = True End If If str <> StrConv(Left(Cells(i, sc + key - 1).Value, moji - 1), vbWide) Then If rng.Rows.count > 1 And f1 Then Call SubSort(rng, key, moji) f = True End If f1 = False str = StrConv(Left(Cells(i, sc + key - 1).Value, moji - 1), vbWide) Set rng = Range(Cells(i, sc), Cells(i, sc + Selection.Columns.count - 1)) Else Set rng = Union(rng, Range(Cells(i, sc), Cells(i, sc + Selection.Columns.count - 1))) If i = sr + Selection.Rows.count - 1 And f1 Then Call SubSort(rng, key, moji) f = True End If End If Next i moji = moji + 1 Loop Until Not f Application.ScreenUpdating = True End Sub Sub SubSort(rng As Range, key As Integer, moji As Integer) Dim i As Long Dim j As Long Dim lastRow As Long Dim sc As Long Dim sr As Long sc = rng.Column sr = rng.Row rng.Sort key1:=Cells(sr, sc + key - 1), order1:=xlAscending If Cells(sr + rng.Rows.count - 1, sc + key - 1).Value <> "" Then lastRow = sr + rng.Rows.count - 1 Else lastRow = Cells(sr + rng.Rows.count - 1, sc + key - 1).End(xlUp).Row End If j = sr For i = sr To lastRow If Len(Cells(j, sc + key - 1).Value) >= moji Then If Mid(Cells(j, sc + key - 1).Value, moji, 1) Like "[ア-ン]" Or Mid(Cells(j, sc + key - 1).Value, moji, 1) Like "[ア-ン]" Then Range(Cells(j, sc), Cells(j, sc + Selection.Columns.count - 1)).Cut Range(Cells(lastRow + 1, sc), Cells(lastRow + 1, sc + Selection.Columns.count - 1)).Insert Shift:=xlDown Else j = j + 1 End If Else j = j + 1 End If Next End Sub
■
Private Sub Workbook_BeforeClose(Cancel As Boolean) Dim i As Integer Dim lastRow As Long Dim res1 As String Dim res2 As String With Worksheets("E") lastRow = .UsedRange.Rows.Count For i = 2 To lastRow If .Cells(i, "A").Value = "買物" Or .Cells(i, "A").Value = "外出" Or _ .Cells(i, "A").Value = "帰宅" Or .Cells(i, "A").Value = "遅刻" Then If .Cells(i, "B").Value = "" Then res1 = .Cells(1, "B").Value .Cells(i, "B").Interior.ColorIndex = 3 Else .Cells(i, "B").Interior.ColorIndex = xlNone End If If .Cells(i, "C").Value = "" Then res2 = .Cells(1, "C").Value .Cells(i, "C").Interior.ColorIndex = 3 Else .Cells(i, "C").Interior.ColorIndex = xlNone End If Else .Range(.Cells(i, "A"), .Cells(i, "C")).Interior.ColorIndex = xlNone End If Next i End With If res1 <> "" Or res2 <> "" Then If res1 <> "" And res2 <> "" Then res2 = "と" & res2 End If MsgBox res1 & res2 & "を入力してください", vbExclamation Cancel = True End If End Sub