回覆列表
  • 1 # 使用者3053396384067

    我來試著回答一下:例項問題看起來比較簡單,其本質是個列轉行的問題,只是結果展示依然以列來標識而已。以下的回答適用於Excel的行轉列處理。

    1、簡單的行列轉換,使用Excel提供的複製—>選擇性貼上—>轉置即可。這種適用於關鍵列中的沒有相同資料的,如:

    2、複雜一點的,使用Excel提供公式來解決:

    A、確定新的列頭,比如題目中的A1/A2/A3是新的列頭:

    -將新的列頭值從列轉為行(參考1中的步驟)

    B、第二步需要做的是基於新的列頭的值(如“A1”),查詢原來的資料中,與“A1”相匹配的值,如“asd”,並把“asd”填到“A1”的下方;為了方便演示,我將資料整理成如下形式,下面將使用Excle的行列標引來表示公式:

    寫公式前的提醒:最後使用陣列公式(有大括號包起來),寫好公式後使用Ctrl+Shift+Enter完成輸入,分步解讀中直接說明邏輯

    C、現在在D2格子中開始一步一步寫公式:

    -在B1:B5中查詢D1,使用if公式,如果相等,則返回BI:B5的行號,否則任意返回一個值(儘量大一點,方便後面使用small函式):if($B$1:$B$5=D$1,row($B$1:$B$5),1000)

    對D2來說,上述公式返回的值為:{1,1000,1000,1000,1000}

    -用small函式將if函式得到的一串值進行升序排列,並和B1對應的行號做對比,鎖定對應的行號:small(if($B$1:$B$5=D$1,row($B$1:$B$5),1000),row(B1))

    對D2來說,上述公式返回的值為:small({1,1000,1000,1000,1000},1)=1

    -基於上一步找到的行號,在A1:A5中查詢對應的值,使用index函式:

    index($A$1:$A$5,small(if($B$1:$B$5=D$1,row($B$1:$B$5),1000),row(B1)))

    對D2來說,上述公式返回的值為:index($A$1:$A$5,1)=asd

    D、基於C步驟的解讀,可以看到最終D2的公式為:{=index($A$1:$A$5,small(if($B$1:$B$5=D$1,row($B$1:$B$5),1000),row(B1)))}

    其中{}是錄入公式結束後,按Ctrl+Shift+Enter得到的:

    F、對於上述過程,可以使用Excel自帶的“公式求值”功能完成每一步的檢查:

    End.

  • 中秋節和大豐收的關聯?
  • 如果你是DNF的遊戲策劃,你要如何改變遊戲執行現狀?